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


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

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

использование 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
команды.

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

Если вы используете zsh (1), включите "расширенный глобус" с setopt extendedglob
in .zshrc. Предваряя шаблон с ' * * то/' будет удалить рекурсивно:
% rm-rf * * / < шаблон >
однако, если есть большое файлы для удаления, вы должны прибегнуть к найти(1) С xargs (1) или -Exec, и я также рекомендую делать это в shell-скрипты.

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