17

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

5 ответов5

35

Чтобы прямо ответить на ваш вопрос, «нет - вы не можете делать то, что вы описываете с помощью rm ».

Вы можете, однако, сделать это, комбинируя это с 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
8

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

Нет.

3

Используя Bash, с установленным globstar , да:

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 {} +

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

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

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

0

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

% rm -rf **/<pattern>

Однако, если есть много файлов, которые нужно удалить, вы должны прибегнуть к поиску (1) с помощью xargs (1) или -exec, и я также рекомендую делать это в сценариях оболочки.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .