Что такое рекурсивное удаление
Перейти к содержимому

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

  • автор:

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

Есть скрипт, который по временному штампу удаляет файлы. Удаление с рекурсией, отчищаются и вложенные директории. После работы скрипта, остаются пустые директории. Подскажите, как еще удалить и отчищенные директории.

import os import datetime for dirpath, dirnames, filenames in os.walk(r'C:\py\dir_for_remove'): for file in filenames: curpath = os.path.join(dirpath, file) file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) if datetime.datetime.now() - file_modified > datetime.timedelta(minutes=5): os.remove(curpath) 

Отслеживать
76.7k 6 6 золотых знаков 54 54 серебряных знака 120 120 бронзовых знаков
задан 8 ноя 2018 в 9:04
421 1 1 золотой знак 7 7 серебряных знаков 20 20 бронзовых знаков

если Вас устроил ответ нажмите на галочку, которая слева от ответа и человеку написавшему его будет приятно.

9 ноя 2018 в 20:04

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Попробуйте этот вариант:

import os from datetime import datetime, timedelta for root, dirs, files in os.walk(r'C:\py\dir_for_remove', topdown=False): for file in files: curpath = os.path.join(root, file) file_modified = datetime.fromtimestamp(os.path.getmtime(curpath)) if datetime.now() - file_modified > timedelta(minutes=5): os.remove(curpath) # Проходим по директориями и удаляем пустые for d in dirs: curpath = os.path.join(root, d) if not os.listdir(curpath): os.rmdir(curpath) 

topdown=False — меняет порядок обхода с конца в начало, что поможет при удалении папок

Рекурсивное удаление каталога без запроса подтверждения в Linux

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

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

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

Чтобы рекурсивно удалить каталог в Linux Mint 20 без запроса подтверждения у пользователя, необходимо выполнить следующую серию шагов.

Шаг 1: Список содержимого каталогов

Мы создали два примера каталогов, а именно, Directory1 и Directory2, в нашем домашнем каталоге, чтобы продемонстрировать этот метод рекурсивного удаления каталогов в Linux Mint 20. Каталог1 содержит два подкаталога с именами D1 и D2, тогда как Каталог2 содержит файл с именем D5. Мы покажем вам содержимое нашего домашнего каталога, чтобы вы могли убедиться, что каталоги Directory1 и Directory2 существуют в нашем домашнем каталоге. Чтобы просмотреть содержимое домашнего каталога, мы выполним следующую команду в нашем терминале:

Вы можете видеть из вывода этой команды, что Directory1 и Directory2 существуют в нашем домашнем каталоге, как показано на изображении ниже. Мы выполнили этот шаг, чтобы вы могли легко проверить удаление, выполненное на шаге 4 этого метода.

Далее мы покажем вам содержимое нашего Directory1, выполнив следующую команду в терминале:

$ ls / home / aqsa_yasin / Directory1

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

Содержимое Directory1 показано на изображении ниже:

Наконец, мы покажем вам содержимое нашего Directory2, выполнив следующую команду в терминале:

$ ls / home / aqsa_yasin / Directory2

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

Содержимое Directory2 показано на изображении ниже:

Шаг 2. Рекурсивное удаление одного каталога без запроса подтверждения пользователя

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

$ rm –rf PathOfTheDirectoryToBeDeleted

Здесь замените «PathOfTheDirectoryToBeDeleted» точным путем к каталогу, который вы собираетесь удалить. В нашем случае это каталог /home/aqsa_yasin/Directory1. Флаг «-rf» вместе с командой «rm» рекурсивно удаляет каталог, не запрашивая подтверждения у пользователя.

Шаг 3. Рекурсивное удаление нескольких каталогов без запроса подтверждения пользователя

Если вы хотите рекурсивно удалить несколько каталогов за раз, не запрашивая у пользователя подтверждения, пропустите шаг 2 и вместо этого выполните следующую команду в своем терминале:

$ rm –rf Path1 Path2 …..

Здесь замените «Путь1» и «Путь2» точными путями каталогов, которые вы собираетесь удалить. В нашем случае мы хотели удалить только два каталога, то есть Directory1 и Directory2. Однако вы можете удалить столько каталогов, сколько хотите, используя эту команду, просто указав пути к каталогам, разделенные пробелами, после команды «rm –rf».

Шаг 4. Проверка удаления указанных каталогов

После выполнения команды на шаге 3 в идеале наши каталоги Directory1 и Directory2 должны быть удалены вместе со всеми их подкаталогами из нашего домашнего каталога. Мы всегда можем подтвердить, успешно ли прошел процесс удаления, перечислив содержимое нашего домашнего каталога. Мы можем сделать это, выполнив следующую команду в терминале:

На этот раз в выводе этой команды мы больше не сможем видеть Directory1 и Directory2 в домашнем каталоге, как показано на изображении ниже. Это означает, что указанные каталоги были успешно удалены.

Заключение

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

Все права защищены. © Linux-Console.net • 2019-2023

Удаление файлов и каталогов

В Linux для удаления файлов предназначена утилита rm (сокращение от англ. «remove» — «удалять»).

[methody@localhost methody]$ rm examples/text [methody@localhost methody]$ ls -l text-hardlink -rw-r--r-- 1 methody methody 653 Сен 30 10:04 text-hardlink [methody@localhost methody]$ rm text-hardlink [methody@localhost methody]$ ls -l text-hardlink ls: text-hardlink: No such file or directory

Пример 16. Удаление файла

Разобравшись в ссылках, Мефодий решил удалить файл text в каталоге examples . После этого файл text-hardlink в домашнем каталоге Мефодия, который является жёсткой ссылкой на удалённый файл text продолжает благополучно существовать. Единственное отличие, которое заметил Мефодий — количество жёстких ссылок на этот файл теперь уменьшилось с « 2 » до « 1 » — действительно, text-hardlink — теперь единственное имя этого файла. Получается, что Мефодий удалил только одно из имён этого файла (жёсткую ссылку), сам файл остался нетронутым.

Однако если Мефодий удалит и жёсткую ссылку text-hardlink — у этого файла больше не останется ни одного имени, он станет недоступным пользователю файловой системы и будет уничтожен.

Утилита rm предназначена именно для удаления жёстких ссылок, а не самих файлов. В Linux, чтобы полностью удалить файл, требуется последовательно удалить все жёсткие ссылки на него. При этом все жёсткие ссылки на файл (его имена) равноправны — среди них нет «главной», с исчезновением которой исчезнет файл. Пока есть хоть одна ссылка, файл продолжает существовать. Впрочем, у большинства файлов в Linux есть только одно имя (одна жёсткая сслылка на файл), поэтому команда rm имя файла успешно удалит файл в большинстве случаев.

Как уже говорилось, символьные ссылки — это отдельные файлы, поэтому после того, как Мефодий удалил файл text , text-symlink , который ссылался на этот файл, продолжает существовать, однако теперь это — «битая ссылка», поэтому его также можно удалить командой rm .

Мефодий решил создать каталог для разных упражнений — test , а потом решил обойтись одним каталогом examples . Однако команда rm не сработала, заявив, что test — это каталог:

[methody@localhost methody]$ mkdir test [methody@localhost methody]$ rm test rm: невозможно удалить `test': Is a directory [methody@localhost methody]$ rmdir test [methody@localhost methody]$

Пример 17. Удаление каталога

Для удаления каталогов предназначена другая утилита — rmdir (от англ. «remove directory»). Впрочем, rmdir согласится удалить каталог только в том случае, если он пуст: в нём нет никаких файлов и подкаталогов. Удалить каталог вместе со всем его содержимым можно командой rm с ключом « -r » (recursive). Команда rm -r каталог — очень удобный способ потерять в одночасье все файлы: она рекурсивно обходит весь каталог , удаляя всё, что попадётся: файлы, подкаталоги, символьные ссылки. а ключ « -f » (force) делает её работу ещё неотвратимее, так как подавляет запросы вида «удалить защищённый от записи файл», так что rm работает безмолвно и безостановочно.

«Рекурсивно» по отношению к каталогам обозначает, что действие будет произведено над самим каталогом, его подкаталогами, подкаталогами его подкаталогов и т. д.

Помните: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!

В Linux не предусмотрено процедуры восстановления удалённых файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm и, тем более, rm -r : нет никакой гарантии, что удастся восстановить случайно удалённые данные. Узнав об этом, Мефодий не огорчился, но подумал, что впредь будет удалять только действительно ненужные файлы, а всё сомнительное — перемещать с помощью mv в подкаталог ~/tmp , где оно не будет мозолить глаза, и где можно периодически наводить порядок.

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

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

anonymous
10.01.09 20:42:21 MSK

Re: Рекурсивное удаление пустых директорий

man find
man lor_search

sdio ★★★★★
( 10.01.09 20:58:11 MSK )
Ответ на: Re: Рекурсивное удаление пустых директорий от sdio 10.01.09 20:58:11 MSK

Re: Рекурсивное удаление пустых директорий

sdio ★★★★★
( 10.01.09 20:59:04 MSK )

Re: Рекурсивное удаление пустых директорий

О чем речь? rm -rf Или я что-то не понял?

aspell
( 11.01.09 05:00:58 MSK )
Ответ на: Re: Рекурсивное удаление пустых директорий от aspell 11.01.09 05:00:58 MSK

Re: Рекурсивное удаление пустых директорий

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

baaba ★★★
( 11.01.09 09:22:34 MSK )
Ответ на: Re: Рекурсивное удаление пустых директорий от baaba 11.01.09 09:22:34 MSK

Re: Рекурсивное удаление пустых директорий

>я понял человеку нужен скрипт для удаления только дирректорий, при условии что они пусты

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *