Можно ли использовать rm для рекурсивного удаления файлов и каталогов, соответствующих шаблону, без использования других команд?
5 ответов
Чтобы прямо ответить на ваш вопрос, «нет - вы не можете делать то, что вы описываете с помощью 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
"без использования других команд"
Нет.
Используя 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
.
Если вы используете zsh(1), включите "расширенное глобирование" с помощью setopt extendedglob
в .zshrc. Префикс шаблона '**/' затем рекурсивно удалит:
% rm -rf **/<pattern>
Однако, если есть много файлов, которые нужно удалить, вы должны прибегнуть к поиску (1) с помощью xargs (1) или -exec, и я также рекомендую делать это в сценариях оболочки.
Я бы сказал "rm -rf", где комбинация имен файлов и соответствующих шаблонов, таких как * и? и т. д. (например, todays_log_2009????. log). Это начнется с текущего Dir и рекурсивно удалит файлы, которые соответствуют этому шаблону.