Что такое рекурсивное удаление
Рассмотрим команды для удаления файлов и каталогов.
Кстати, имей ввиду, что объект считается удаленным только тогда, когда удалены все его жесткие ссылки. Подробнее о жестких ссылках поговорим немного позже.
А как узнать их количество?
Что такое рекурсивное удаление?
Представим, что есть каталог. А в нем еще подкаталоги и файлы, а в тех подкаталогах другие подкаталоги. Чтобы удалить сразу все объкты одним разом, то достаточно при удалении указать корневой родительский каталог и система, начиная с самого низа удалит и файлы и подкаталоги.Данный процесс и называется рекурсивным.
Например, у нас имеется недавно созданный родительский каталог catalogue_A, а в нем следующие объекты:
Теперь удалим каталог catalogue_A вместе с содержимым и проверим все
Как видно каталог catalogue_A отсутствует.
Нет, система выдаст ошибку, так как команда rm используется в основном для удаления файлов.
Для удаления отдельных каталогов используется следующая команда:
А если он не пустой?
Если он не пустой, то система выдаст ошибку:
В данном случае поможет команда
Например, попробуем удалить каталог testA со всеми подкаталогами:
Теперь удалим их все:
10 примеров команды ‘rm’ для начинающих
rm означает «remove», как следует из названия, команда rm используется для удаления файлов и каталогов в UNIX-подобной операционной системе. Если вы новичок в Linux, вы должны быть очень осторожны при запуске команды rm, потому что, как только вы удалите файлы, вы не сможете восстановить содержимое файлов и каталогов. Хотя есть некоторые инструменты и команды, с помощью которых можно восстановить удаленные файлы, но для этого вам нужны экспертные навыки.
В этом посте я продемонстрирую 10 примеров команд Linux rm. Ниже приведен основной синтаксис команды rm.
Пример #1: Удаление файла
Давайте удалим файл с именем «linuxstufff.log»
Удаление нескольких файлов одновременно.
Давайте предположим, что я хочу удалить четыре текстовых файла одновременно. Используйте приведенный ниже синтаксис.
Пример #2: Интерактивное удаление файлов
Параметр ‘-i‘ спрашивает разрешение перед удалением, как показано ниже.
Пример #3: Удаление пустой директории
Используйте опцию «-d» для удаления пустой папки.
Вы также можете использовать команду ‘rmdir‘ для удаления пустых папок.
Пример #4: Рекурсивное удаление директорий
Команде rm вместе параметром ‘-r‘ рекурсивно удалит все файлы и подкаталогов в родительской директории.
Пример #5: Удаление файлов и подкаталогов интерактивно
Используйте опцию ‘-ri‘ в команде rm для интерактивного удаления файлов и подкаталогов.
Пример #6: Принудительное удаление файлов
Параметр ‘-f‘ в команде rm принудительно удаляет файлы независимо от их прав доступа, а также игнорирует несуществующие файлы.
Давайте удалим защищенный от записи файл ‘tech.txt’
Как мы видим выше, когда мы пытаемся удалить файл, защищенный от записи, с помощью команды rm без опции ‘-f‘, выходит предупреждение.
Теперь попробуйте удалить файл, используя опцию ‘-f‘.
Также попробуем удалить несуществующий файл.
Примечание: опция -f не будет работать для каталогов, защищенных от записи.
Давайте рассмотрим пример, каталог ‘home/home/mordeniuss/location/protected‘ защищен от записи, а файл ‘db_stuff‘ внутри этого каталога нет.
Пример #7: Проверка при удалении более 3 файлов или рекурсивном удаление
Параметр ‘-I‘ в команде rm перед удалением более трех файлов или рекурсивным удалением запрашивает подтверждение.
Предположим, я хочу удалить все файлы журнала, которые начинаются с имени «app» в каталоге «linux_store».
Пример #8: Регулярные выражения в команде rm
Мы можем использовать регулярные выражения в команде rm, некоторые примеры показаны ниже:
Давайте удалим 5 файлов журнала, начиная с log1 до log5 в каталоге ‘linux_store‘.
Удалим все файлы в данной директории, которые заканчиваются на ‘.txt‘
Удалим все файлы в текущем каталоге, которые имеют три символа в расширение.
Пример #9: Удаление большого количества файлов
Если вы пытаетесь удалить большое количество файлов с помощью команды rm, вы получите сообщение об ошибке
‘Argument list too long‘ (Список аргументов слишком длинный)
В приведенном ниже примере я пытаюсь удалить все файлы (около 300001) каталога ‘/home/mordeniuss/linux_store‘ сразу.
Чтобы решить эту проблему, используйте команду:
Пример #10: Удаление файлов, начинающихся с дефиса (-)
Давайте предположим, что у нас есть файл с именем ‘-store‘ в нашем текущем каталоге, и мы хотим удалить этот файл.
Удалить этот файл можно с помощью команд ниже.
Команда rm Linux
Для удаления файлов в операционной системе Линукс используется команда rm, она означает «remove».
Обращаться с утилитой необходимо максимально аккуратно. Небольшие опечатки могут привести к удалению важных документов, тем самым разрушить операционную систему.
Стоит отметить, что удаление файлов посредством введения команды «rm» установлено по умолчанию. Если необходимо убрать директорию и все ее содержимое, рекомендуется воспользоваться опцией «-r». Такое действие именуется рекурсивным удалением.
Синтаксис
rm [параметр] путь к файлу или его название
В качестве пути прописываются один или несколько файлов. Возможен вариант написание полного пути или относительного.
Примеры
Стирание файла
Для первого примера удалим файл «test2» в каталоге root/test2.
Это можно сделать как минимум двумя способами:
Воспользуемся 2 вариантом.
Стоит отметить, что допускается удаление одновременно нескольких файлов. Названия указываются через пробел.
Если такого файла нет в каталоге, система выдаст предупреждение.
Принудительное удаление документа с установленной защитой
Бывают ситуации, когда требуется удалить документ, который защищен от записи. По умолчанию выдается запрос, требующий подтверждения. Для отключения такого запроса используется аргумент «-f».
Удаление всех файлов, которые расположены в определённой директории
Для осуществления поставленной цели потребуется применить шаблон « *».
Для примера удалим все файлы в каталоге /root/catalog.
Вывести запрос, всплывающий перед удалением отдельно взятых файлов
Для появления подтверждения на необходимость изъятия данных нужно воспользоваться аргументом «-i».
Вывести запрос на стирание только один раз
Для осуществления этой задачи нужно воспользоваться аргументом «-I», но удаляемых файлов должно быть более четырех.
Удаление каталога с ее содержимым
Чтобы стиреть весь каталог со всем его содержимым, будем использовать опцию «-R».
Рекурсивное удаление каталога в Java
Узнайте, как рекурсивно удалить каталог в обычной Java и с помощью внешних инструментов.
1. введение
В этой статье мы проиллюстрируем, как рекурсивно удалить каталог в обычной Java. Мы также рассмотрим некоторые альтернативы удалению каталогов с помощью внешних библиотек.
2. Рекурсивное удаление каталога
В Java есть возможность удалить каталог. Однако для этого требуется, чтобы каталог был пуст. Итак, нам нужно использовать рекурсию для удаления определенного непустого каталога:
Давайте реализуем этот простой алгоритм:
Этот метод можно протестировать с помощью простого тестового примера:
Метод @До нашего тестового класса создает дерево каталогов с подкаталогами и файлами в пути для удаления местоположения и @После метод очищает каталог, если требуется.
Далее давайте посмотрим, как мы можем добиться удаления с помощью двух наиболее часто используемых библиотек – Apache commons-io и Spring Framework spring-core. Обе эти библиотеки позволяют нам удалять каталоги, используя всего одну строку кода.
3. Использование имен файлов из commons-io
Во-первых, нам нужно добавить зависимость commons-io в проект Maven:
Теперь мы можем использовать FileUtils для выполнения любых операций на основе файлов, включая удаление каталога() всего одним оператором:
4. Использование файловых систем с весны
В качестве альтернативы мы можем добавить зависимость s spring-core в проект Maven:
Последнюю версию зависимости можно найти здесь.
Мы можем использовать метод deleteRecursively() в FileSystemUtils для выполнения удаления:
Последние выпуски Java предлагают новые способы выполнения таких операций ввода-вывода, описанные в следующих разделах.
5. Использование NIO2 С Java 7
Пожалуйста, обратитесь к Введению в файловый API Java NIO2 для получения более подробной информации об API NIO2 для обработки файловых операций.
6. Использование NIO2 С Java 8
Начиная с Java 8, Stream API предлагает еще лучший способ удаления каталога:
7. Заключение
В этом кратком руководстве мы рассмотрели различные способы удаления каталога. В то время как мы видели, как использовать рекурсию для удаления, мы также рассмотрели некоторые библиотеки, NIO2, использующие события, и поток путей Java 8, использующий парадигму функционального программирования.
Опубликовано 2021-11-11 · Обновлено 2021-11-11
Содержание:
1. Описание.
Команда rm означает «remove» и создана для удаления файлов и каталогов.
Хотя есть некоторые инструменты и команды, с помощью которых можно восстановить удаленные файлы, но для этого вам нужны экспертные навыки и это не всегда срабатывает.
2. Синтаксис.
Вместо КОГДА можно использовать:
3. Примеры использования.
3.1. Удалить файл.
Это очень просто. Все, что вам нужно сделать — передать имя файла (вместе с путями, если он не находится в текущем рабочем каталоге), как ввод для команды rm :
Чтобы удалить файл с помощью команды rm достаточно указать название файла:
# ls /rm_test/
# rm /rm_test/some_file_01.txt
# ls /rm_test/
Ответ:
Можно удалить несколько файлов, перечислив их имена через пробел:
# ls /rm_test/
# cd /rm_test/
# rm some_file_02.txt some_file_03.txt some_file_04.txt
# ls /rm_test/
Ответ:
3.2. Удалить файл с необычным именем.
Ответ:
Ответ:
3.3. Удалить все файлы в текущем каталоге.
Чтобы удалить все файлы в текущем каталоге можно использовать шаблонную запись звездочка * :
# ls /rm_test/
# rm /rm_test/*
# ls /rm_test/
Ответ:
3.4. Выдать запрос на удаление всего один раз на всё.
Ответ:
3.5. Удалить файлы и каталоги без предварительного запроса или не существующие.
Например, ногда не нужно, чтобы выходил вопрос об удалении файлов и каталогов и всё происходило автоматически:
Ответ:
Также попробуем удалить несуществующий файл или каталог:
Ответ: просто успешно применится команда и всё, нет предупреждений, что чего-то не существует.
3.6. Удалить каталог и его содержимое рекурсивно.
Удалим каталог mydir и все файлы и подкаталоги внутри его:
Ответ:
3.7. Удаление файлов и подкаталогов интерактивно.
Ответ:
При удалении каждого файла, в каждом подкаталоге целевого каталога, будет задан вопрос на удаление, персонально для каждого файла:
Ответ:
3.8. Удаление пустых каталогов.
Ответ:
Вы также можете использовать команду rmdir для удаления пустых каталогов:
Ответ:
3.9. Как заставить rm выводить детали работы, которые она выполняет?
Ответ:
3.10. Регулярные выражения в команде.
К примеру удалим 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. Как защитить файл или каталог от удаления.
Защитим файл или каталог от удаления:
# chattr +i /rm_test/some_file_01.txt
# lsattr /rm_test/some_file_01.txt
Давайте удалим защищенный от записи файл some_file_01.txt :
Ответ:
Давайте удалим защищенный от записи файл some_file_01.txt :
Ответ: нормально позволит удалить с запросом на удаление.
5. Как уничтожить операционную систему одной командой?
Если выполнить эту команду в терминале, а именно выполнить:
Появится предупреждение о том, что выполнение команды опасно:
Если выполнить команду:
Тогда все данные с корневого раздела диска будут удалены!
Иногла злоумышленнки могу замаскировать ввод команды вот так:
Примечание! Иногда данная команда используется, чтобы «подшутить» над новичками в GNU/Linux. Некоторые пользователи на форумах советуют «чайникам» выполнить данную команду, чтобы решить свои проблемы. Чтобы шутка удалась, саму команду иногда маскируют, например, вставляют ее внутрь другой длинной команды, чтобы она не так выделялась.
Внимание! Все, что вы прочитаете ниже, написано только в информационных целях, не повторяйте этого на своем компьютере!
Французский математик Фабрис Белар (Fabrice Bellard), более известный как разработчик знаменитых утилит ffmpeg, qemu, tcc, заявляет, что из-за ошибки предустановленных в дистрибутивы GNU/Linux французских языковых пакетов скорость его работы замедляется от 15% до 25%, в зависимости от архитектуры.
Ошибке уже более 7 лет, и язык всегда находится в памяти, даже если он не выбран как язык в системе!
После перезагрузки увеличится как скорость работы самой операционной системы, так и других приложений.