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

У этого вопроса уже есть ответ здесь: Как я могу рекурсивно удалить все файлы определенного расширения в текущем каталоге? 5 ответов

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

-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 в 12:32

9 ответов

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

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

Если нет других каталогов или файлов, соответствующих шаблону delme_*, вы можете сделать это коротко.

find . -name "delme_*" -delete
3
ответ дан 8 June 2018 в 15:16

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

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

Если нет других каталогов или файлов, соответствующих шаблону delme_*, вы можете сделать это коротко.

find . -name "delme_*" -delete
3
ответ дан 17 July 2018 в 18:05

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

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

Если нет других каталогов или файлов, соответствующих шаблону delme_*, вы можете сделать это коротко.

find . -name "delme_*" -delete
3
ответ дан 23 July 2018 в 18:55

Вы можете комбинировать 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 (удалить каталог) в каждом из файлов, найти «вверх по течению», то есть из команды file. [ ! d4]

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

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

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

3
ответ дан 8 June 2018 в 15:16
  • 1
    @ pa4080 да, я исправил свой ответ, спасибо. – Patrick Mevzek 26 March 2018 в 13:02
  • 2
    [Ф1] не надо – αғsнιη 27 March 2018 в 04:43
  • 3
    αғsнιη @да-не надо, но не проблема. лучше показать, что вы можете сделать комбинации логических высказываний – Patrick Mevzek 27 March 2018 в 10:04
[Ф1]
1
ответ дан 8 June 2018 в 15:16
  • 1
    почему не "rm * / * delme "? Или это потому, что встроенное эхо не имеет предела аргумента? – Sebastian Stark 26 March 2018 в 14:30
  • 2
    Я думаю, что каждое расширение ограничено определенными системными ограничениями. Однако использование xargs может быть решением. – Josef Klimuk 26 March 2018 в 16:57
[F1]
1
ответ дан 17 July 2018 в 18:05

Вы можете комбинировать 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 (удалить каталог) в каждом из файлов, найти «вверх по течению», то есть из команды file. [ ! d4]

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

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

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

3
ответ дан 17 July 2018 в 18:05
[F1]
1
ответ дан 23 July 2018 в 18:55
  • 1
    почему не "rm * / * delme "? Или это потому, что встроенное эхо не имеет предела аргумента? – Sebastian Stark 26 March 2018 в 14:30
  • 2
    Я думаю, что каждое расширение ограничено определенными системными ограничениями. Однако использование xargs может быть решением. – Josef Klimuk 26 March 2018 в 16:57

Вы можете комбинировать 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 (удалить каталог) в каждом из файлов, найти «вверх по течению», то есть из команды file. [ ! d4]

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

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

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

3
ответ дан 23 July 2018 в 18:55
  • 1
    @ pa4080 да, я исправил свой ответ, спасибо. – Patrick Mevzek 26 March 2018 в 13:02
  • 2
    -a не требуется – αғsнιη 27 March 2018 в 04:43
  • 3
    @ αғsнιη да -a не обязательно, но и не проблема. лучше показать, что вы можете делать комбинацию логических утверждений – Patrick Mevzek 27 March 2018 в 10:04

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

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