Answers:
要直接回答您的问题,“不-您不能做您所描述的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
设置为yes:
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开始,然后递归地删除破坏该模式的文件。