Ответы:
Чтобы прямо ответить на ваш вопрос, «нет - вы не можете делать то, что вы описываете 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
find | grep | xargs rm
. Если есть файлы с пробелами (или символами новой строки), это приведет к разрыву (и в зависимости от имен файлов и мест, где они находятся) может привести к удалению того, что вы не собирались удалять. find … -print0 | xargs -0 rm
будет гораздо надежнее. Однако это будет означать, что вы не можете использовать grep
и должны использовать find
предикаты, чтобы сопоставлять и печатать только нужные файлы. Второй пример Уоррена будет более надежным find -type f -name '*~' -print0 | xargs -0 rm
.
«без использования других команд»
Нет.
Используя Bash, с 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 {} +
или другой вариант для не-GNU find
(немного медленнее):
find -type f -name 'my*pattern*' -exec rm {} \;
Чтобы также удалить каталоги, как вы просите: только изменения rm
в rm -r
в приведенных выше команд и пропустить согласования на только -type f
в find
командах.
Я бы сказал "rm -rf", где комбинация имен файлов и соответствующих шаблонов, таких как * и? и т. д. (например, todays_log_2009 ????. log). Это начнется с текущего Dir и рекурсивно удалит файлы, которые соответствуют этому шаблону.
Если вы используете zsh (1) , включите «расширенную глобализацию» с помощью setopt extendedglob
.zshrc. После добавления префикса к шаблону ** / рекурсивно удаляется:
% rm -rf ** / <pattern>
Однако, если нужно удалить много файлов, вам следует прибегнуть к поиску (1) с помощью xargs (1) или -exec, и я также рекомендую делать это в сценариях оболочки.