3

如何使用通配符删除包含字符串作为嵌入字符串的文件,除了开头或结尾之外。

我是一个业余爱好者,开始 Ubuntu 还不到一个月。

4

2 回答 2

6
rm ?*foo?*

删除包含 foo 的文件,前提是前后至少有一个字符,因此“foobar”和“barfoo”不会被删除,而“barfoobar”会被删除。

作为预防措施,请执行

ls ?*foo?*

首先要确保您没有删除错误的内容。并且要非常小心,不要意外包含任何空格,因为rm ?* foo?*几乎可以肯定是非常糟糕的。为了提供一些保护,请将参数用引号括起来,因此

rm "?*foo?*"
于 2012-09-26T04:54:03.673 回答
1

我认为这不可能通过单一的扩展模式实现。您可以grep改为使用过滤:

ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm

因此,ls列出所有包含的内容foo,然后egrep删除开头/结尾匹配的文件,最后在每个剩余部分上xargs运行一个命令(rm在这种情况下)。

这种技术的危险之处在于文件名可能包含特殊字符,如换行符或星号,因此使用风险自负!

于 2012-09-26T06:50:05.280 回答