используйте rm для рекурсивного удаления файлов и каталогов

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

24
задан warren
27.04.2023 8:25 Количество просмотров материала 3681
Распечатать страницу

5 ответов

чтобы непосредственно ответить на ваш вопрос: "нет, вы не можете делать то, что вы описываете rm".

вы can, однако, это вы объединить его с find. Вот один из многих способов сделать это:

 # search for everything in this tree, search for the file pattern, pipe to rm
 find . | grep <pattern> | xargs rm

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

 # the $ anchors the grep search to the last character on the line
 find . -type f | grep '~'$ | xargs rm

расширить из комментария*:

 # this will handle spaces of funky characters in file names
 find -type f -name '*~' -print0 | xargs -0 rm
35
отвечен warren 2023-04-28 16:13

"без использования других команд"

нет.

8
отвечен Drakia 2023-04-28 18:30

использование Bash, with globstar set,да:

rm basedir/**/my*pattern*

попробуй, например,ls -1 во-первых, перед rm, чтобы перечислить файлы, которые вы подходите.

задать параметры, например shopt -s globstar.


или короче find вариант:

find -type f -name 'my*pattern*' -delete

или для GNU find:

find -type f -name 'my*pattern*' -exec rm {} +

или другая альтернатива для non-GNU find (немного медленнее):

find -type f -name 'my*pattern*' -exec rm {} \;

для также удалите каталоги, как вы просите: просто измените rm на rm -r в приведенных выше команд и пропустить соответствие только на -type f на find команды.

3
отвечен Daniel Andersson 2023-04-28 20:47

Я бы asuumed "rm-rf" где сочетание имен файлов, и соответствующие шаблоны, такие как * и ? и т. д. (Например, todays_log_2009????.бревно. ) Это начнется с текущего Dir и работать вниз рекурсивно удаления файлов, которые macth этот шаблон.

0
отвечен ianfuture 2023-04-28 23:04

Если вы используете zsh (1), включите "расширенный глобус" с setopt extendedglob in .zshrc. Предваряя шаблон с ' * * то/' будет удалить рекурсивно:

% rm-rf * * / < шаблон >

однако, если есть большое файлы для удаления, вы должны прибегнуть к найти(1) С xargs (1) или -Exec, и я также рекомендую делать это в shell-скрипты.

0
отвечен kaleissin 2023-04-29 01:21

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх