正如标题所述,我正试图以递归方式删除以._
开头的文件夹中的所有文件。对于我网站上的每个文件,都存在一个具有相同名称的文件,但附加了._
。我怎么摆脱这些?
答案 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
使用此命令也可以在搜索中包含名称中包含空格的文件和文件夹。