如何递归删除以“._”开头的文件夹中的所有文件?

时间:2010-08-15 11:19:49

标签: recursion terminal file-management delete-file

正如标题所述,我正试图以递归方式删除以._开头的文件夹中的所有文件。对于我网站上的每个文件,都存在一个具有相同名称的文件,但附加了._。我怎么摆脱这些?

4 个答案:

答案 0 :(得分:5)

我认为你的意思是“前置”

LATER EDIT

SH脚本:

find . -name ".?*" -exec rm {} \;
以前的代码不能递归地工作;这一个。 如果您也想删除文件夹,请使用以下命令:
find . -name ".?*" -exec rm -R {} \;

答案 1 :(得分:2)

this post可能重复,我在自己的生产服务器上成功使用了它:

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete

答案 2 :(得分:1)

编辑:以下用户Gilles正确地提到以下替代技术可能是危险的,因为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程序负责扩展每个子目录的wildchards。

答案 3 :(得分:0)

find . \( -name '.DS_Store' -or -name '._*' \) -type f -print0 | xargs -0 rm -f

使用此命令也可以在搜索中包含名称中包含空格的文件和文件夹。