Как удалить все внутри папки linux

Как удалить файлы и каталоги с помощью командной строки Linux

В этом руководстве мы покажем вам, как использовать команды rm , unlink и rmdir для удаления файлов и каталогов в Linux.

Как удалить файлы

Чтобы удалить (или удалить) файл в Linux из командной строки, используйте команду rm (remove) или unlink .

Команда unlink позволяет удалить только один файл, а с помощью rm вы можете удалить сразу несколько файлов.

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

Чтобы удалить один файл, используйте команду rm или unlink за которой следует имя файла:

Если файл защищен от записи, вам будет предложено подтвердить, как показано ниже. Чтобы удалить тип файла y и нажмите Enter . В противном случае, если файл не защищен от записи, он будет удален без запроса.

Чтобы удалить сразу несколько файлов, используйте команду rm после которой укажите имена файлов, разделенные пробелом.

Вы также можете использовать подстановочный знак ( * ) и обычные расширения для соответствия нескольким файлам. Например, чтобы удалить все файлы .pdf в текущем каталоге, используйте следующую команду:

При использовании обычных расширений сначала перечислите файлы с помощью команды ls чтобы вы могли видеть, какие файлы будут удалены, прежде чем запускать команду rm .

Используйте rm с параметром -i для подтверждения каждого файла перед его удалением:

Чтобы удалить файлы без запроса, даже если файлы защищены от записи, передайте параметр -f (force) команде rm :

Вы также можете комбинировать параметры rm . Например, чтобы удалить все файлы .txt в текущем каталоге без запроса в подробном режиме, используйте следующую команду:

Как удалить каталоги (папки)

В Linux вы можете удалять / удалять каталоги с помощью rmdir и rm .

rmdir — это утилита командной строки для удаления пустых каталогов, а с помощью rm вы можете рекурсивно удалять каталоги и их содержимое.

Чтобы удалить пустой каталог, используйте rmdir или rm -d за которым следует имя каталога:

Чтобы удалить непустые каталоги и все файлы в них, используйте команду rm с параметром -r (рекурсивный):

Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление.

Чтобы удалить непустые каталоги и все файлы без запроса, используйте rm с параметрами -r (рекурсивный) и -f :

Чтобы удалить сразу несколько каталогов, используйте команду rm -r после которой укажите имена каталогов, разделенные пробелом.

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

Выводы

К настоящему времени вы должны хорошо понимать, как использовать команды Linux rm , rmdir и unlink и у вас должна быть возможность безопасно удалять файлы и каталоги из командной строки.

Источник

Как удалить каталог Linux

В операционной системе Linux можно выполнить большинство действий через терминал. Удаление каталога Linux — это достаточно простое действие, которое можно выполнить просто открыв файловый менеджер.

Читайте также:  Почтовый клиент под windows

Однако в терминале это делается немного быстрее и вы получаете полный контроль над ситуацией. Например, можете выбрать только пустые папки или удалить несколько папок с одним названием. В этой статье мы рассмотрим как удалить каталог Linux через терминал.

Как удалить каталог Linux

Существует несколько команд, которые вы можете использовать для удаления каталога Linux. Рассмотрим их все более подробно. Самый очевидный вариант — это утилита rmdir. Но с помощью нее можно удалять только пустые папки:

Другая команда, которую можно применить — это rm. Она предназначена для удаления файлов Linux, но может использоваться и для папок если ей передать опцию рекурсивного удаления -r:

Такая команда уже позволяет удалить непустой каталог Linux. Но, можно по-другому, например, если вы хотите вывести информацию о файлах, которые удаляются:

rm -Rfv моя_папка

Команда -R включает рекурсивное удаление всех подпапок и файлов в них, -f — разрешает не удалять файлы без запроса, а -v показывает имена удаляемых файлов. В этих примерах я предполагаю что папка которую нужно удалить находится в текущей рабочей папке, например, домашней. Но это необязательно, вы можете указать полный путь к ней начиная от корня файловой системы:

rm -Rfv /var/www/public_html

Читайте подробнее про пути в файловой системе в статье путь к файлу Linux. Теперь вы знаете как удалить непустой каталог в консоли linux, далее усложним задачу, будем удалять папки, которые содержат определенные слова в своем имени:

find . -type d -name «моя_папка» -exec rm -rf <> \;

Подробнее про команду find смотрите в отдельной статье. Если кратко, то -type d указывает, что мы ищем только папки, а параметром -name задаем имя нужных папок. Затем с помощью параметра -exec мы выполняем команду удаления. Таким же образом можно удалить только пустые папки, например, в домашней папке:

/ -empty -type d -delete

Как видите, в find необязательно выполнять отдельную команду, утилита тоже умеет удалять. Вместо домашней папки, можно указать любой нужный вам путь:

find /var/www/public_html/ -empty -type d -delete

Перед удалением вы можете подсчитать количество пустых папок:

find /var/www/public_html/ -empty -type d | wc -l

Другой способ удалить папку linux с помощью find — использовать в дополнение утилиту xargs. Она позволяет подставить аргументы в нужное место. Например:

/ -type f -empty -print0 | xargs -0 -I <> /bin/rm «<>«

Опция -print0 выводит полный путь к найденному файлу в стандартный вывод, а затем мы передаем его команде xargs. Опция -0 указывает, что нужно считать символом завершения строки \0, а -I — что нужно использовать команду из стандартного ввода.

Если вы хотите полностью удалить папку Linux, так, чтобы ее невозможно было восстановить, то можно использовать утилиту wipe. Она не поставляется по умолчанию, но вы можете ее достаточно просто установить:

sudo apt install wipe

Теперь для удаления каталога Linux используйте такую команду:

Опция -r указывает, что нужно удалять рекурсивно все под папки, -f — включает автоматическое удаление, без запроса пользователя, а -i показывает прогресс удаления. Так вы можете удалить все файлы в папке linux без возможности их восстановления поскольку все место на диске где они были будет несколько раз затерто.

Читайте также:  Lshw linux что это

Выводы

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

Источник

Так как же удалить миллионы файлов из одной папки?


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

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

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

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

Подготовка

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

Создаём пустой файл размером 200Гб

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

Форматируем файл в ext4 и монтируем его как файловую систему

К сожалению, я узнал об опции -N команды mkfs.ext4 уже после экспериментов. Она позволяет увеличить лимит на количество inode на FS, не увеличивая размер файла образа. Но, с другой стороны, стандартные настройки — ближе к реальным условиям.

Создаем множество пустых файлов (будет работать несколько часов)

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

Проверяем, что все айноды на ФС исчерпаны.

Размер файла директории

Теперь попробуем удалить эту директорию со всем её содержимым различными способами.

Тесты

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

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

$ rm -r /mnt/test_dir/
Под strace несколько раз подряд (. ) вызывает getdents() , затем очень много вызывает unlinkat() и так в цикле. Занял 30Мб RAM, не растет.
Удаляет содержимое успешно.

Т.е. удалять переполненные директории с помощью rm -r /путь/до/директории вполне нормально.

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

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

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

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

Читайте также:  Подключение домашней группы windows 10 отсутствует

Удаление через 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 -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 >‘ (взял здесь)
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 380Кб памяти, не растет.
Удаляет успешно.

Получается, что использование readdir вполне возможно?

$ gcc -o cleandir cleandir.c
$ ./cleandir
Под strace один раз вызывает getdents() , потом много раз unlink() и так в цикле. Занял 128Кб памяти, не растет.
Удаляет успешно.

Опять — же, убеждаемся, что использовать readdir — вполне нормально, если не накапливать результаты в памяти, а удалять файлы сразу.

Источник

Как удалить все файлы из каталога?

Самое близкое, что я получил, это

но это не работает для файлов, которые не имеют расширения .

Linux не использует расширения. Создатель файла должен решить, хочет ли он, чтобы имя имело расширение. Linux смотрит на 1-й байт, чтобы выяснить, с каким файлом он имеет дело.

Чтобы удалить все в каталоге, используйте:

Вы можете использовать -r опцию, например:

rm -r /path/to/directory/*

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

Чтобы удалить папку со всем ее содержимым ( включая все внутренние папки ):

Чтобы удалить все содержимое папки ( включая все внутренние папки ), но не саму папку:

если вы хотите убедиться, что скрытые файлы / каталоги также удалены.

Чтобы удалить все «файлы» из папки ( не удаляя внутренние папки ):

Предупреждение : если на вашем пути есть пробелы, всегда используйте кавычки.

эквивалентно 2 отдельным rm -rf вызовам:

Чтобы избежать этой проблемы, вы можете использовать ‘ одинарные кавычки ‘ ( не расширяет переменные оболочки) или » двойные кавычки » ( расширяет переменные оболочки):

  • rm — означает « удалить »
  • -f — означает « сила », которая полезна, когда вы не хотите, чтобы вас спрашивали / подсказывали, например, если вы хотите удалить архив.
  • -r — означает « рекурсивный », что означает, что вы хотите рекурсивно пройтись по каждой папке и удалить все.

Источник

Оцените статью