【发布时间】:2012-09-26 04:32:17
【问题描述】:
如何删除包含字符串作为嵌入字符串的文件,除非在 使用通配符开始或结束。
我是一个业余爱好者,开始使用 Ubuntu 不到一个月。
【问题讨论】:
如何删除包含字符串作为嵌入字符串的文件,除非在 使用通配符开始或结束。
我是一个业余爱好者,开始使用 Ubuntu 不到一个月。
【问题讨论】:
rm ?*foo?*
删除包含 foo 的文件,前提是前后至少有一个字符,因此“foobar”和“barfoo”不会被删除,而“barfoobar”会被删除。
作为预防措施,请这样做
ls ?*foo?*
首先要确保您没有删除错误的内容。并且要非常小心,不要意外包含任何空格,因为 rm ?* foo?* 几乎可以肯定是非常糟糕的。为了提供一些保护,请将参数用引号括起来,因此
rm "?*foo?*"
【讨论】:
我认为这对于单一的扩展模式是不可能的。您可以改用grep 进行过滤:
ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm
所以ls 列出了包含foo 的所有内容,然后egrep 删除了开头/结尾匹配的文件,最后xargs 对每个剩余部分运行一个命令(在这种情况下为rm)。
The dangerous thing about this technique 是文件名可能包含特殊字符,如换行符或星号,因此使用风险自负!
【讨论】: