Как быстро удалить все файлы с определенными именами

Каждый пользователь компьютера или планшета время от времени удаляет файлы больших размеров . Обычно это файлы видео, аудио, картинки, архивы, в том числе образы диска, инсталляторы программ и т. д.

Файлы больших размеров постепенно накапливаются на жёстком диске или на флешке, тем самым уменьшая их объём.

Кстати говоря, люди всё чаще покупают компьютеры в интернет-магазинах. В Украине лидером в этом сегменте является «Розетка», купить компьютер в Минске можно на сайте Купи.Тут.

Компьютеры в какой-то степени делают людей ленивыми. Если раньше люди намного чаще ходили в кино, то сейчас большинство скачивает на компьютер нужный фильм или смотрит его онлайн. Даже если вы купили компьютер с терабайтом жёсткого диска для видео, музыки, фоток или игр – это не значит, что этого объёма памяти вашему компьютеру хватит «до самой смерти».

Настанет час «Ч», когда вы хотите сохранить файл, а места для этого отсутствует. Именно в такие моменты большинство пользователей начинают переворачивать весь ворох файлов и папок для того чтобы отыскать старые и редко используемые фалы больших размеров.

Удаляем файлы больших размеров при помощи WinDirStat

Весь указанный выше процесс можно ускорить и автоматизировать при помощи небольшой утилиты WinDirStat. Скачать эту программу можно по ссылке http://windirstat.info/download.html

Использование утилиты WinDirStat

Установите WinDirStat. Запустите её. Утилита просканирует выбранный вами диск и выдаст вам список папок (файлов) и под ними фрагментируемую структуру диска . Каждый квадратик – это файл.

Нажимайте на большие квадратики и программа вам покажет файлы больших размеров. Посмотрите, какие из них можно безболезненно удалить. Удалять файлы можно прямо в WinDirStat.

Познакомитесь с возможностями этой программы. Она очень легка в использование. Разобраться может даже школьник.

Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.

Прочитал статью и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.

Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии - т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе - либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.

Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.

Подготовка

Так как создавать переполненную директорию на своём HDD рабочего компьютера, потом мучиться с её удалением ну никак не хочется, создадим виртуальную ФС в отдельном файле и примонтируем её через loop-устройство. К счастью, в Linux с этим всё просто.

Создаём пустой файл размером 200Гб
#!python f = open("sparse", "w") f.seek(1024 * 1024 * 1024 * 200) f.write("\0")

Многие советуют использовать для этого утилиту dd, например dd if=/dev/zero of=disk-image bs=1M count=1M , но это работает несравнимо медленнее, а результат, как я понимаю, одинаковый.

Форматируем файл в ext4 и монтируем его как файловую систему
mkfs -t ext4 -q sparse # TODO: less FS size, but change -N option sudo mount sparse /mnt mkdir /mnt/test_dir
К сожалению, я узнал об опции -N команды mkfs.ext4 уже после экспериментов. Она позволяет увеличить лимит на количество inode на FS, не увеличивая размер файла образа. Но, с другой стороны, стандартные настройки - ближе к реальным условиям.

Создаем множество пустых файлов (будет работать несколько часов)
#!python for i in xrange(0, 13107300): f = open("/mnt/test_dir/{0}_{0}_{0}_{0}".format(i), "w") f.close() if i % 10000 == 0: print i
Кстати, если в начале файлы создавались достаточно быстро, то последующие добавлялись всё медленнее и медленнее, появлялись рандомные паузы, росло использование памяти ядром. Так что хранение большого числа файлов в плоской директории само по себе плохая идея.

Проверяем, что все айноды на ФС исчерпаны.
$ df -i /dev/loop0 13107200 13107200 38517 100% /mnt
Размер файла директории ~360Мб
$ ls -lh /mnt/ drwxrwxr-x 2 seriy seriy 358M нояб. 1 03:11 test_dir
Теперь попробуем удалить эту директорию со всем её содержимым различными способами.

Тесты

После каждого теста сбрасываем кеш файловой системы
sudo sh -c "sync && echo 1 > /proc/sys/vm/drop_caches"
для того чтобы не занять быстро всю память и сравнивать скорость удаления в одинаковых условиях.

Удаление через rm -r

$ rm -r /mnt/test_dir/
Под strace несколько раз подряд (!!!) вызывает getdents() , затем очень много вызывает unlinkat() и так в цикле. Занял 30Мб RAM, не растет.
Удаляет содержимое успешно.
iotop 7664 be/4 seriy 72.70 M/s 0.00 B/s 0.00 % 93.15 % rm -r /mnt/test_dir/ 5919 be/0 root 80.77 M/s 16.48 M/s 0.00 % 80.68 %
Т.е. удалять переполненные директории с помощью rm -r /путь/до/директории вполне нормально.

Удаление через rm ./*

$ rm /mnt/test_dir/*
Запускает дочерний процесс шелла, который дорос до 600Мб
Очевидно, что glob по звёздочке обрабатывается самим шеллом, накапливается в памяти и передается команде rm после того как считается директория целиком.

Удаление через find -exec

$ find /mnt/test_dir/ -type f -exec rm -v {} \;
Под strace вызывает только getdents() . процесс find вырос до 600Мб , прибил по ^C . Ничего не удалил.
find действует так же, как и * в шелле - сперва строит полный список в памяти.

Удаление через find -delete

$ find /mnt/test_dir/ -type f -delete
Вырос до 600Мб , прибил по ^C . Ничего не удалил.
Аналогично предыдущей команде. И это крайне удивительно! На эту команду я возлагал надежду изначально.

Удаление через ls -f и xargs

$ cd /mnt/test_dir/ ; ls -f . | xargs -n 100 rm
параметр -f говорит, что не нужно сортировать список файлов.
Создает такую иерархию процессов:
| - ls 212Кб | - xargs 108Кб | - rm 130Кб # pid у rm постоянно меняется
Удаляет успешно.
iotop # сильно скачет 5919 be/0 root 5.87 M/s 6.28 M/s 0.00 % 89.15 %
ls -f в данной ситуации ведет себя адекватнее, чем find и не накапливает список файлов в памяти без необходимости. ls без параметров (как и find) - считывает список файлов в память целиком. Очевидно, для сортировки. Но этот способ плох тем, что постоянно вызывает rm , чем создается дополнительный оверхед.
Из этого вытекает ещё один способ - можно вывод ls -f перенаправить в файл и затем удалить содержимое директории по этому списку.

Удаление через perl readdir

$ perl -e "chdir "/mnt/test_dir/" or die; opendir D, "."; while ($n = readdir D) { unlink $n }" (взял )
380Кб памяти, не растет.
Удаляет успешно.
iotop 7591 be/4 seriy 13.74 M/s 0.00 B/s 0.00 % 98.95 % perl -e chdi... 5919 be/0 root 11.18 M/s 1438.88 K/s 0.00 % 93.85 %
Получается, что использование readdir вполне возможно?

Удаление через программу на C readdir + unlink

//file: cleandir.c #include #include #include int main(int argc, char *argv) { struct dirent *entry; DIR *dp; chdir("/mnt/test_dir"); dp = opendir("."); while((entry = readdir(dp)) != NULL) { if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")){ unlink(entry->d_name); // maybe unlinkat ? } } }
$ gcc -o cleandir cleandir.c
$ ./cleandir
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 128Кб памяти, не растет.
Удаляет успешно.
iotop: 7565 be/4 seriy 11.70 M/s 0.00 B/s 0.00 % 98.88 % ./cleandir 5919 be/0 root 12.97 M/s 1079.23 K/s 0.00 % 92.42 %
Опять - же, убеждаемся, что использовать readdir - вполне нормально, если не накапливать результаты в памяти, а удалять файлы сразу.

Выводы

  • Использовать комбинацию функций readdir() + unlink() для удаления директорий, содержащих миллионы файлов, можно.
  • На практике лучше использовать rm -r /my/dir/ , т.к. он поступает более умно - сперва строит относительно небольшой список файлов в памяти, вызывая несколько раз readdir() , а затем удаляет файлы по этому списку. Это позволяет более плавно чередовать нагрузку на чтение и запись, чем повышает скорость удаления.
  • Для снижения нагрузки на систему использовать в комбинации с nice или ionice . Либо использовать скриптовые языки и вставлять небольшие sleep() в циклах. Либо генерировать список файлов через ls -l и пропускать его через

В посте " " я рассказывал, как избавится от ненужных файлов, загружающих сервер.

Нам нужно было удалить создаваемые WordPress превью. Но удалять каждый файл по одному или выделяя группами – долгое и утомительное занятие. Как удалить сразу все файлы с определенными именами? В этом деле нам поможет отличный файловый менеджер Total Commander.

Total Commander – платная программа, но даже после месяца бесплатного использования авторы, понимая, что не у всех есть деньги, не против, чтобы вы использовали ее и дальше. Единственное "неудобство" заключается в том, что нужно нажимать одну из трех кнопок при запуске программы.Итак, удаляем сразу много файлов с определенными именами с помощью Total Commander.

Запускаем программу, находим нужную папку на сервере (как использовать Total Commander в качестве FTP-менеджера, расскажем в одном из будущих постов). Чтобы выделить определенную группу файлов, отвечающим какому-либо условию, нужно выбрать в меню: Выделение – Выделить группу или использовать "горячую клавишу" Num+.


Теперь нужно указать определенную маску файлов. Создаем наш шаблон – нажимаем на одноименную кнопку.

Так как у нас все ненужные превью имеют вид "имя_файла–размер_х_размер", то указываем в качестве отличия файлов знак "х". Нажимаем кнопку Записать для сохранения шаблона.


Называем наш созданный шаблон, нажимаем OK.


Теперь для выделения файлов (Num+), выбираем созданный шаблон ("Превью"). Нажимаем OK.

Вот, в принципе, и готово – все файлы, соответствующие указанному шаблону, выделяться. Теперь нужно внимательно их просмотреть, чтобы не удалить случайный нужный файл, содержащий знак "х". Чтобы отменить его выделение, кликаем при зажатой клавише Ctrl.


Остается только нажать на клавишу Delete, подтвердить удаление и дождаться удаления всех ненужных файлов, соответствующих заданным условиям. При быстром удалении множества файлов с определенными именами или определенного расширения (формата) можно использовать несколько шаблонов.

Если вам тут понравилось – подпишитесь на обновления блога!На десерт предлагаю посмотреть смешное видео "Простое решение сложных проблем"

В операционной системе Windows одну и ту же операцию можно выполнить разными способами. Кто-то привык управлять ресурсами компьютера с помощью мыши, кто-то – через клавиатуру. Чтобы быстро удалить папку, нужно лишь понять, какой способ для вас самый простой и удобный.

Инструкция

  • Основная часть файлов и папок не удаляется с компьютера сразу, а помещается в корзину. Если вам необходимо полностью удалить папку, любое из нижеперечисленных действий должно завершаться очисткой корзины.
  • Чтобы удалить файлы из корзины, подведите курсор мыши к значку «Корзина» на рабочем столе, кликните по нему правой кнопкой мыши и выберите в выпадающем меню команду «Очистить корзину». Подтвердите свои действия в окне запроса. Альтернативный вариант: откройте элемент «Корзина» и выберите на панели типичных задач ту же самую команду.
  • Саму же папку можно удалить следующими способами. Подведите курсор мыши к более ненужной папке, кликните по ее значку правой кнопкой мыши и выберите в контекстном меню команду «Удалить». В окне запроса подтвердите операцию, нажав на кнопку «Да». Папка будет помещена в корзину.
  • Другой вариант больше подойдет в том случае, если вам необходимо удалить сразу несколько папок. Удерживая нажатой левую кнопку мыши, выделите папки, которые хотите удалить. Повторите действия, описанные в предыдущем шаге.
  • Еще один способ удаления с помощью мыши: подведите курсор к значку папки, удерживая нажатой левую кнопку мыши, перетащите значок папки на значок корзины на рабочем столе. Подтвердите свои действия в окне запроса.
  • Если вам привычнее работать на клавиатуре, выделите папку, которую хотите поместить в корзину, нажмите клавишу Delete. Когда система запросит подтверждение операции, нажмите клавишу Enter.
  • В том случае, когда вы не можете вспомнить, в какой директории находится папка, сначала воспользуйтесь компонентом «Поиск». Нажмите на кнопку «Пуск» или клавишу Windows, выберите в меню пункт «Поиск». В открывшемся окне задайте критерии поиска и нажмите на кнопку «Найти». Когда искомая папка будет найдена, удалите ее любым из способов, описанных выше, прямо из окна поисковика.
  • Оцените статью!

    Стояла ли перед вами когда-нибудь задача, удалить большой объем информации с компьютера? Наверняка хотя бы раз стояла, а если нет, то обязательно будет, поверьте. И тот, кто с этим сталкивался, может вам точно сказать, что это настоящий геморрой.

    Ведь большой объем - это много файлов, расположенных во множестве папок. Эти файлы, по отдельности, разных форматов и размеров, какие-то из них, возможно, скрыты, у каких-то ограниченный доступ или еще хуже - запаролены. И вот когда вы беретесь удалять все это обычным способом , то начинают вылетать разного рода вопросы, типа, « , вы уверенны, что хотите её удалить?» или «На этой папке стоит пароль, вы уверенны, что хотите её удалить?». А бывает так, что ты все это «скрывал и паролил» год назад и теперь ничего не помнишь, да тебе и не надо их помнить, ты просто хочешь от них избавиться. А что если таких файлов несколько десятков или еще больше?

    Мне эта ситуация знакома, так как делаю я на компьютере много чего и захламляется он часто. То я хотел стать мастером кун-фу и накачал видео на 50 гигабайт, то решил выучить английский, накачав 80 гигабайт различных курсов, то я хотел передвигать предметы руками, как джедай, и накачал еще какой-то дребедени на 90 гигабайт. В общем, удалять большие объемы информации мне приходиться часто, так как я все время ищу себя в чем-то новом:) (и не собираюсь останавливаться). обычным способом порой приходиться по несколько часов.

    Но, на мое счастье я нашел программу, с помощью которой можно удалять много информации быстро . Эта программа называется Fast Folder Eraser Free.

    Для начала нужно её скачать, например отсюда .

    После того как скачаете, выскочит такое окно. Нажмите «Запустить»


    После чего идет стандартная установка, которая не должна вызвать трудности.

    После того как установка закончиться и вы нажмете готово (или Finish), перед вами выскочит такое окно. Нажмите Accept.



    В нем-то, мы и должны выбрать папку, которую хотим удалить. Чтобы выбрать папку нажмите на кнопку с многоточием, обведенную красным, на рисунке выше.

    После чего перед нами откроется окошко выбора.


    «Внутренности» папки открываются двойным щелчком, но когда вы дойдете до нужной, нажмите на нее один раз, а после нажмите на ОК.

    Все, папку мы выбрали, теперь нажмите Delete и пойдет процесс удаления.


    Вот это да, хотел фоткнуть процесс, но не успел! У меня все удалилось меньше чем за две секунды! Там было 242 песни, и весили они больше гигабайта. Для примера скажу. Обычным бы способом, т.е. Правой кнопкой мыши -> Удалить, все бы это у меня удалялось минут 5! Так что судите сами.

    Вот такая интересная, а кому-то, например мне, еще и нужная программка.

    На этом все. Пока.