рекурсивно удалить подкаталоги и файлы [дубликат]

У меня есть следующая конфигурация файлов и каталогов:

-Parent_dir
    |-delme_dir
    |-delme_file
    |-aFile
    |-sub_dir
        |-delme_dir
        |-delme_file
        |-aFile
        |-sub_dir
            |-delme_dir
            |-delme_file
            |-aFile
    |-sub_dir2
        |-delme_dir
        |-delme_file
        |-aFile

Есть ли команда, которую я могу использовать из Parent_dir для рекурсивного удаления всех каталогов delme_dir и файлов delme_file ?

0
задан 26 March 2018 в 02:32

3 ответа

В единственной команде Вы могли сделать это:

find . \( -type d -name "delme_dir" -o -type f -name "delme_file" \) -delete

Если нет никакого другого соответствия каталогов или файлов с шаблоном delme_*, можно сделать короче говоря.

find . -name "delme_*" -delete
4
ответ дан 30 October 2019 в 04:47

Вы можете комбинировать find, xargs и rm:

find . -type f -a -name delme_files -print0 | xargs -0 rm

и

find . -type d -a -name delme_dir -print0 | xargs -0 rmdir

(когда вы находитесь в каталоге Parent_dir)

]

Возможно, есть способ объединить эти два find в один, но я все равно нахожу это более ясным.

Команды find найдут каталоги / файлы, названные в соответствии с вашим примером, и вы направите результаты в xargs, который выполнит rm (удалить) / rmdir (удалить каталог) для каждого файла найдите «upstream», то есть из команды file.

Если каталоги не пусты, замените rmdir на rm -Rf, но это рекурсивно удалит все файлы в каталогах, найденные командой find.

Комбинация -print0 / -0 будет гарантировать, что все файлы / каталоги будут обрабатываться правильно, даже те, которые имеют пробелы в своих именах (возможно, здесь не нужны, но лучше использовать в общих случаях).

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

3
ответ дан 30 October 2019 в 04:47
shopt -s globstar
echo **/*delme* | xargs rm
1
ответ дан 30 October 2019 в 04:47

Другие вопросы по тегам:

Похожие вопросы: