Рекурсивное удаление файлов что это

Обновлено: 06.07.2024

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

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

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

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

  • Для удаления пустого каталога используйте эту опцию -d.rm -d dirname
  • Чтобы удалить непустые каталоги и все файлы внутри них, используйте параметр r (рекурсивный).rm -r dirname

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

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

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





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

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

rm -Rfv /var/www/public_html

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


Подробнее про команду 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, так, чтобы ее невозможно было восстановить, то можно использовать утилиту wipe. Она не поставляется по умолчанию, но вы можете ее достаточно просто установить:

sudo apt install wipe

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

Как удалить каталог в linux через терминал

Как удалить пустую папку в Linux через терминал

Если вам нужно удалить пустую папку в Linux через терминал, то для этого проще всего использовать команду rmdir. Данная команда используется для удаления пустых папок из файловой системы Linux. Каталоги с файлами или другими каталогами данная команда не удаляет.

Синтаксис команды rmdir выглядит следующим образом:

Разберем доступные параметры подробней:

Для того чтобы просто удалить пустую папку нужно ввести «rmdir foldername». Где «foldername» это название удаляемого объекта. При желании можно удалить сразу несколько папок, для этого достаточно перечислить их через пробел.

удаление пустых папок в Linux

Если необходимо удалить каталог, в котором есть другие каталоги (без файлов), то можно воспользоваться параметром «-p». Для этого нужно ввести «rmdir -p» и указать полный путь. Например, если в каталоге folder1 есть другой каталог folder2, то мы можем удалить их сразу одной командой «rmdir -p folder1/folder2».

удаление дерева пустых папок в Linux

При использовании параметра «-v» в консоль будет выведена подробная информация о процессе удаления каталогов.

удаление пустых папок с выводом информации

А при использовании параметра «ignore-fail-on-non-empty» команда будет игнорировать ошибки, которые будут возникать при попытке удаления непустых каталогов.

удаление пустых папок с игнорированием ошибок

Нужно отметить, что также существует команда «mkdir», которая предназначена для создания папок и обладает точно таким же синтаксисом.

создание папок в Linux

С ее помощью вы можете создать папки по одной или целым деревом (при использовании параметра «-p»).

Как удалить папку с содержимым (с файлами) в Linux

Если нужно удалить папку с каким-то содержимым, например, с файлами, то тут уже нужно использовать команду «rm». Данная Linux команда предназначена для удаления файлов, но с ее помощью можно удалять и каталоги, если использовать параметр «-r», который включает рекурсивное удаление.

Синтаксис команды rm выглядит следующим образом:

Разберем основные параметры команды rm:

Для удаления папок с файлами нам нужно использовать параметр «-r». Введите «rm -r» и укажите название папки, которую нужно удалить. Например, если у нас есть каталог folder1 с какими-то файлами, то мы можем ее удалить, введя команду «rm -r folder1»

удаление папок с файлами в Linux

Если необходимо, чтобы удаление папок сопровождалось запросом, то вместе с параметром «-r» можно использовать параметр «-i». В этом случае каждая операция, которую будет выполнять команда, будет требовать разрешения пользователя. При этом команда для удаления папки folder1 будет выглядеть как «rm -ri folder1».

удаление папок с файлами и запросом к пользователю

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

удаление папок с выводом информации

Например, вы можете указать «rm -rv /home/aleks/folder1» для того, чтобы удалить папку folder1 с выводом подробной информации.

Как удалить все файлы в папке Linux

В некоторых случаях может возникнуть необходимость удалить все файлы в папке при этом не удаляя саму папку. Для решения такой задачи можно использовать вот такую команду «rm -rf /path/to/directory/*». Данная команда удалит все файлы и папки (рекурсивно удалит все содержимое) по указанному пути.


Если же нужно удалить все файлы в папке, но оставить вложенные папки, то это можно сделать командой «rm -f /path/to/directory/*».


Альтернативный вариант — это удаление самой папки со всем содержимым (включая скрытые файлы и каталоги) и повторное ее создание.


Для этого подойдет команда «rm -rf foldername && mkdir foldername».

Удаление всей директории со всеми вложенными файлами и директориями командой rm

В повседневной работе гораздо чаще приходится удалять не пустые директории, и тут на на помощь приходит команда rm. К примеру, удалить все содержимое директории letters можно командой (Осторожно! удаление без подтверждения):

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

Дополнительная информация о командах rmdir и rm

Чтобы получить дополнительную информацию по этим командам, Вы всегда можно воспользоваться следующей стандартной командой-справочником-подсказкой-документацией:

Почему существует две различные команды для одной операции?

Казалось бы, а зачем создавать отдельную команду для удаления только пустых директорий, если можно воспользоваться rm? Но, вдумавшись, понимаешь, что это была просто великолепная идея! Почему? Да потому что невозможно запомнить какие и где файлы хранятся, и когда нужно удалить директорию с каким-нибудь глупым или подозрительным названием (явно созданную по ошибке) можно воспользоваться безопасной командой rmdir, которая выдаст ошибку если в этой директории есть какие-то файлы. Очень удобно! Это защищает от случайного удаления.

rm -f файл либо rm --force файл - принудительное удаление файла. Это необходимо тогда, когда у пользователя нет права работать с объектами каталога, в котором находится сам файл.

rm -i файл либо rm --interactive файл - при удалении файла система спросит, действительно ли ты хочешь его удалить. При этом достаточно ввести y(yes) либо n(no)

Использование команды rm с интерактивной опцией -i

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

А как узнать их количество?

С помощью команды ls -l

Отображение жестких ссылок

rm -r каталог - рекурсивное удаление всех каталогов и файлов.

Что такое рекурсивное удаление?

Представим, что есть каталог. А в нем еще подкаталоги и файлы, а в тех подкаталогах другие подкаталоги. Чтобы удалить сразу все объкты одним разом, то достаточно при удалении указать корневой родительский каталог и система, начиная с самого низа удалит и файлы и подкаталоги.Данный процесс и называется рекурсивным.

Например, у нас имеется недавно созданный родительский каталог catalogue_A, а в нем следующие объекты:

Отображение каталогов


Теперь удалим каталог catalogue_A вместе с содержимым и проверим все

rm -r catalogue_A/

Рекурсивное удаление содержимого каталога

Как видно каталог catalogue_A отсутствует.

А можно ввести просто rm catalogue_A/ ?

Нет, система выдаст ошибку, так как команда rm используется в основном для удаления файлов.

Для удаления отдельных каталогов используется следующая команда:

rmdir каталог - удаление пустых каталогов.

А если он не пустой?

Если он не пустой, то система выдаст ошибку:

Ошибка при удалении непустого каталога

В данном случае поможет команда

rmdir --ignore-fail-on-non-empty каталог - удаление непустых каталогов

rmdir -p каталог/подкаталог_1/подкаталог_2 - удаление родительского и всех вложенных в него каталогов. Данная команда работает, когда они не содержат других файлов, кроме самих каталогов и подкаталогов.

Например, попробуем удалить каталог testA со всеми подкаталогами:

Отображение файлов и каталогов

Теперь удалим их все:

Удаление каталога testA

Для большей информативности можно использовать опцию -v ( --verbose )

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

Я нашел это решение, где мы указываем путь в командной строке и запускаем эту команду.

Я привел пример с папкой с расширением файла .svn:

Пожалуйста, выполните следующие шаги:

  1. Откройте командную строку
  2. Измените каталог на нужный путь

Дайте следующую команду

У меня не работает, удаляет только файлы в текущем каталоге.

Другие ответы не сработали для меня, но это сработало:

/ q отключает запрос Да / Нет

/ s означает удаление файла (ов) из всех подкаталогов.

Я думаю, что мои потребности совпадают с тем, что вы пытаетесь сделать - я пытаюсь удалить все папки .svn в каталоге проекта и все подкаталоги. В Windows 2012 этот ответ у меня не работает. Он удаляет папку .svn в текущем каталоге, но не из дочерних каталогов.

Вы можете использовать это в bat скрипте:

Теперь просто c:\folder a перейдите в местоположение вашей папки. Цитата требуется только в том случае, если имя вашей папки содержит пробелы.

Эта команда не работает и выдает ошибку, как показано ниже D: \> rd / s / q "D: \ Root a". Система не может найти указанный файл. Если имя вашего каталога действительно не содержит space a , оставьте эту часть.

ех. RMDIR "C:\tmp" /S

Обратите внимание, что вам будет предложено действительно удалить папку «C: \ tmp». Комбинируя его с переключателем / Q, вы автоматически удаляете папку (например RMDIR "C:\tmp" /S /Q ).

Для удаления файла я написал следующий простой командный файл, который рекурсивно удалял все .pdf:

Даже для локального каталога мы можем использовать его как:

То же самое можно применить к удалению каталога, где нам просто нужно изменить del с помощью rmdir .

Если вы хотите рекурсивно удалить определенное расширение, используйте это:

Вы также можете сделать:

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

То есть rmdir / S / Q C: \ Temp

Я также использую приведенные ниже в течение нескольких лет, безупречно.

Проверьте другие варианты с помощью: forfiles /?

Удалить SQM / Телеметрию в папке Windows рекурсивно

Удалить файлы Windows TMP рекурсивно

Рекурсивное удаление пользовательских файлов и папок TEMP

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

Например, у меня была папка под названием "Temp", и я хотел удалить или удалить все файлы из этой папки с помощью PHP. Могу ли я это сделать?

ОТВЕТЫ

Ответ 1

Если вы хотите удалить скрытые файлы, такие как .htaccess, вы должны использовать

Ответ 2

Если вы хотите удалить все из папки (включая подпапки), используйте эту комбинацию array_map , unlink и glob :

Обновить

Этот вызов также может обрабатывать пустые каталоги - спасибо за подсказку, @mojuba!

Ответ 3

Вот более современный подход, используя Стандартную библиотеку PHP (SPL).

Ответ 4

Ответ 5

Ответ 6

Ответ 7

Ответ 8

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

Например, в linux я использую:

Или это, если вы хотите рекурсивное удаление без необходимости писать рекурсивную функцию

те же самые точные команды существуют для любой ОС, поддерживаемой PHP. Имейте в виду, что это способ удаления файлов. $absolutePathToFolder ДОЛЖЕН быть проверен и защищен перед запуском этого кода, и разрешения должны быть предоставлены.

Ответ 9

Простой и лучший способ удалить все файлы из папки в PHP

Ответ 10

Другое решение: Этот класс удаляет все файлы, подкаталоги и файлы в подкаталогах.

Ответ 11

Функция unlinkr рекурсивно удаляет все папки и файлы в указанном пути, убедившись, что она сама не удаляет script.

если вы хотите удалить все файлы и папки, в которые вы помещаете этот script, затем выполните его как

если вы хотите просто удалить только файлы php, а затем вызвать его как

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

Это приведет к удалению всех файлов в каталоге home/user/temp.

Ответ 12

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

Чтобы скопировать (или переместить) один файл или набор папок/файлов:

Удалите один файл или все файлы и папки в пути:

Рассчитайте размер одного файла или набора файлов в наборе папок:

Ответ 13

Ответ 14

Для меня решение с readdir было лучшим и работало как шарм. С glob функция не работала в некоторых сценариях.

Ответ 15

Я обновил ответ @Stichoza, чтобы удалить файлы через подпапки.

Ответ 16

Ответ 17

Там есть пакет под названием "Pusheh", который поможет вам полностью удалить каталог (ссылка на Github). Он также доступен на Packagist.

Команда rm означает «remove» и создана для удаления файлов и каталогов.

Внимание! Если вы новичок в GNU/Linux, вы должны быть очень осторожны при запуске команды rm , потому что, как только вы удалите файлы, вы не сможете восстановить содержимое файлов и каталогов.

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

По умолчанию команда rm не удаляет каталоги, чтобы удалить каталоги и всё их содержимое, включая вложенные каталоги, нужно использовать опцию -r , то есть рекурсивное удаление.

2. Синтаксис.

где — один или несколько файлов и/или каталогов, записанных через пробел, можно использовать шаблон по маске файла, например, *.txt .

  • -f или --force — Игнорировать несуществующие файлы и аргументы. Никогда не выдавать запросы на подтверждение удаления.
  • -i — Выводить запрос на подтверждение удаления каждого файла.
  • -I — Выдать один запрос на подтверждение удаления всех файлов, если удаляется больше трех файлов или используется рекурсивное удаление. Опция применяется, как более «щадящая» версия опции -i .
  • --interactive[= КОГДА ] — если значение КОГДА не задано, то используется always .

Вместо КОГДА можно использовать:

    • never — никогда не выдавать запросы на подтверждение удаления.
    • once — выводить запрос один раз (аналог опции -I ).
    • always — выводить запрос всегда (аналог опции -i ).

    3. Примеры использования.

    3.1. Удалить файл.

    Чтобы удалить файл с помощью команды rm достаточно указать название файла:

    Ответ:


    Можно удалить несколько файлов, перечислив их имена через пробел:

    Ответ:


    3.2. Удалить файл с необычным именем.

    Если нужно удалить файл, название которого начинается с символа - , например, файл -myfile , то используется следующая команда:

    Ответ:


    Ответ:


    3.3. Удалить все файлы в текущем каталоге.

    Чтобы удалить все файлы в текущем каталоге можно использовать шаблонную запись звездочка * :

    Ответ:


    3.4. Выдать запрос на удаление всего один раз на всё.

    При использовании опции -I выводится всего один запрос на подтверждение удаления файлов, причем, только если удаляемых файлов четыре и более. Если файлов 3 , или 2 , или 1 , то запрос не выводится.

    То есть параметр -I в команде rm перед удалением более трех файлов или рекурсивным удалением запрашивает подтверждение:

    Ответ:


    3.5. Удалить файлы и каталоги без предварительного запроса или не существующие.

    Например, ногда не нужно, чтобы выходил вопрос об удалении файлов и каталогов и всё происходило автоматически:

    Ответ:


    Также попробуем удалить несуществующий файл или каталог:

    Ответ: просто успешно применится команда и всё, нет предупреждений, что чего-то не существует.

    3.6. Удалить каталог и его содержимое рекурсивно.

    Если вы пытаетесь удалить каталог, вам необходимо использовать параметр командной строки -r . В противном случае rm выдаст ошибку, указывающую, что вы пытаетесь удалить каталог:

    Команде rm вместе параметром -r рекурсивно удалит все файлы и подкаталоги в родительском каталоге.

    Удалим каталог mydir и все файлы и подкаталоги внутри его:

    Ответ:


    3.7. Удаление файлов и подкаталогов интерактивно.

    Если вы хотите, чтобы rm запрашивала подтверждение перед каждым удалением, используйте опцию -i командной строки:

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

    Ответ:


    Используйте опцию -ri в команде rm для интерактивного удаления файлов и подкаталогов.

    При удалении каждого файла, в каждом подкаталоге целевого каталога, будет задан вопрос на удаление, персонально для каждого файла:

    Ответ:


    3.8. Удаление пустых каталогов.

    Если вы хотите ограничить возможность удаления каталога rm только пустым каталогом, вы можете использовать опцию командной строки -d :

    Используйте опцию -d для удаления пустого каталога:

    Ответ:


    Вы также можете использовать команду rmdir для удаления пустых каталогов:

    Ответ:


    3.9. Как заставить rm выводить детали работы, которые она выполняет?

    Если вы хотите, чтобы rm отображала подробную информацию о выполняемой операции, это можно сделать, используя опцию -v командной строки:

    Ответ:



    3.10. Регулярные выражения в команде.

    Можно использовать регулярные выражения в команде rm , некоторые примеры показаны ниже:

    К примеру удалим 5 файлов журнала, начиная с log1 до log5 в каталоге /rm_test/ :

    Удалим все файлы в данном каталоге, которые заканчиваются на *.txt :

    Удалим все файлы в текущем каталоге, которые имеют три символа в расширение:

    3.11. Удаление большого количества файлов.

    ‘Argument list too long‘ (Список аргументов слишком длинный).

    В приведенном ниже примере требуется удалить все файлы (около 300001) из каталога /home/logman/linux_logs/ и его подкаталогов, все и сразу:

    Ответ: 300001

    Ответ: -bash: /bin/rm: Argument list too long

    Чтобы решить эту проблему, используйте команду:

    4. Как защитить файл или каталог от удаления.

    Защитим файл или каталог от удаления:

    Давайте удалим защищенный от записи файл some_file_01.txt :

    Ответ:


    Примечание: опция -f не будет работать для каталогов, защищенных от записи.

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

    Для удаления файла или каталога снимите с него атрибут защиты с помощью тега -i :

    Давайте удалим защищенный от записи файл some_file_01.txt :

    Ответ: нормально позволит удалить с запросом на удаление.

    5. Как уничтожить операционную систему одной командой?

    Команда rm -rf / , выполненная от имени суперпользователя, уничтожит все данные с корневого раздела диска.

    Ключ -r используется для того, чтобы выполнять рекурсивный обход всех каталогов.

    Если выполнить эту команду в терминале, а именно выполнить:

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

    Таким образом программа rm защищает сама себя от плохих действий. При этом сразу же сообщает нам, что мы можем использовать ключ --no-preserve-root , чтобы обойти это предупреждение.

    Если выполнить команду:

    Тогда все данные с корневого раздела диска будут удалены!

    Иногла злоумышленнки могу замаскировать ввод команды вот так:

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

    Процесс работы rm -rf / примерно следующий:

    • Команда выполняется от имени суперпользователя.
    • Копия программы rm загружается в оперативную память.
    • Программа rm начинает удаление всех файлов с корневого раздела / .
    • Во время удаления файлов программа rm в какой-то момент удаляет и саму себя (исполняемый файл программы, файл /bin/rm ). Так как копия программы находится в оперативной памяти, то она продолжает работать, не смотря на то, что исполняемый файл уже удален.
    • Когда удаление файлов завершено, программа rm выгружается из оперативной памяти.
    • На данном этапе в памяти находятся только те программы, которые уже были там до выполнения команды rm (например, ядро, драйвера, окно терминала и так далее).

    Причечание! Очень важный момент, который нужно учитывать. Современные UEFI системы монтируют директорию с прошивками в директорию /sys . Так как rm удаляет все файлы и с примонтированных разделов, то прошивки также будут удалены. Таким образом можно получить не только неработающую систему, но и неработающий компьютер. Будьте внимательны!

    6. Шутка про удаление всех французских языковых пакетов с атрибутом -fr.

    Внимание! Все, что вы прочитаете ниже, написано только в информационных целях, не повторяйте этого на своем компьютере!

    Команда rm -rf / является довольно популярной в узких кругах. Это не потому, что ей постоянно пользуются, а наоборот её избегают. Это что-то вроде шутки у заядлых линуксоидов.

    Читайте также: