2010-08-15 146 views

回答

5

我想你的意思是 “前面加上”

以后编辑

SH脚本:

 
find . -name ".?*" -exec rm {} \; 
上面的代码没有递归工作;这个呢。 如果你想删除文件夹,请使用:
 
find . -name ".?*" -exec rm -R {} \; 

+0

考虑到在问题中使用“递归”,我认为这应该是'-name“。*”'。另外,除非你的系统已经很旧了,并且还不支持它,'-exec rm {} +'会批量调用'rm'而不是每个文件一次。 – Gilles 2010-08-15 22:44:55

+0

@Gilles修复了它,谢谢 – 2010-08-16 09:17:39

+0

你可能想用'find。名称“._?*”-exec rm {} \;'而不是,因为只是点将删除所有以“。”开头的文件,例如'.git'。 – 2013-07-03 00:28:27

1

编辑:用户吉尔斯下面正确提到以下替代技术可能是危险的,因为xargs的不以文件名对待单引号和双引号字面。名称为Today's special.txt的文件将导致错误(未终止的引号)。为了完整起见,我仍然将其包含在内,因为它在网络上被广泛提及。

另一种类似的方式在Unix/Mac上通过管道连接到rm。

find . -name '.*' -type f | xargs rm -f 

-type f参数告诉它忽略目录和特殊文件等等。,..,符号链接和开发者。

我们很遗憾不能使用类似rm -R .*的东西,因为.*输入模式在被发送给rm命令之前由shell展开。它会导致递归删除所有与起始目录相匹配的文件。

Windows等效命令(del -R .*)对用户来说要简单得多,因为 del程序会为每个子目录扩展通配符。

+1

1.'-name'的参数应该只是''。*''。 2.如果存在包含空格或'\“''的文件名(包括前导目录),这将不起作用,因为'xargs'特别处理这些字符。除非您确定知道这些字符,否则不要使用'xargs'字符不会出现在任何文件或目录名称中,而是使用'-exec'来代替,就像在Gabi的回答中一样。这里,由于命令是'rm',因此灾难的可能性尤其大。 – Gilles 2010-08-15 22:42:38

+0

-type f确保dirs包括。,..被忽略。虽然在文件中使用了'",但它们的名字却很好。xargs试图解释它们并导致问题。 我会用您的警告更新我的答案。我仍然认为包含这种做事方式很有用。一个简单的搜索显示了许多提及它。 – Alkaline 2010-08-16 02:40:36

2

this post可能重复,我已经成功地使用我自己的生产服务器上:

find /var/www/html \(-name '.DS_Store' -or -name '._*' \) -delete 
0
 
find . \(-name '.DS_Store' -or -name '._*' \) -type f -print0 | xargs -0 rm -f 

使用此命令,包括文件和文件夹在他们的搜索名称空间,以及。

相关问题