Можно ли использовать rm для рекурсивного удаления файлов и каталогов, соответствующих шаблону, без использования других команд?
unix
maintenance
rm
user15586
источник
источник
find | grep | xargs rm
. Если есть файлы с пробелами (или символами новой строки), это приведет к разрыву (и в зависимости от имен файлов и мест, где они находятся) может привести к удалению того, что вы не собирались удалять.find … -print0 | xargs -0 rm
будет гораздо надежнее. Однако это будет означать, что вы не можете использоватьgrep
и должны использоватьfind
предикаты, чтобы сопоставлять и печатать только нужные файлы. Второй пример Уоррена будет более надежнымfind -type f -name '*~' -print0 | xargs -0 rm
.«без использования других команд»
Нет.
источник
Используя Bash, с
globstar
set, да :Попробуйте, например,
ls -1
сначала, прежде чемrm
перечислить файлы, которые вам подходят.Вы устанавливаете параметры, например, через
shopt -s globstar
.Альтернативно, более короткий
find
вариант:или для GNU
find
:или другой вариант для не-GNU
find
(немного медленнее):Чтобы также удалить каталоги, как вы просите: только изменения
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, и я также рекомендую делать это в сценариях оболочки.
источник