递归删除文件

JT.*_*JT. 139 linux bash

有没有人有一个解决方案来删除那些将文件从Mac移动到Linux服务器后得到的那些讨厌的._和.DS_Store文件?

指定一个开始目录然后放手吧?喜欢/ var/www/html/down ...

X-I*_*nce 169

切换到目录,并使用:

find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

没有经过测试,首先尝试没有xargs!

您可以使用目录替换查找后的句点,而不是先更改为目录.

find /dir/here ...
Run Code Online (Sandbox Code Playgroud)

  • @X:较新的findutils支持`-delete`动作,可以缩短它.@JT:这在`.`下递归搜索.取决于有多少文件和子目录...你不能只是禁止那些上传? (7认同)
  • 是的,这就是print0和-0到xargs的用途.通常它不能正确处理空格,但是对于print0,它将在行的末尾打印带有空字符的文件名,然后使用带有-0的xarg将完整路径传递给xargs而不会有空格.正在使用rm命令的第二个或第三个参数,这可能非常糟糕! (4认同)
  • 我知道他的问题没有要求它,但我永远不会记得:你的例子是否处理带空格的文件名? (2认同)
  • @IlmariKaronen:好点."命令rm"不是更好(即更直接)的解决方案吗?(通过"直接"我的意思是它专门处理手头的问题,而不是其他任何东西,因此不太可能有任何不必要的副作用,并且对于任何必须维护代码的人来说也会更加自我解释后来.) (2认同)

One*_*One 94

find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案 (2认同)

rat*_*ray 85

较新的findutils支持-delete,所以:

find . -name ".DS_Store" -delete
Run Code Online (Sandbox Code Playgroud)

如果你有一个最新的POSIX系统,我会相信你.至少它适用于OS X 10.8,

感谢@ephemient对@ X-Istence的帖子发表评论(认为这有助于保证自己的答案).

  • @OneOfOne:正如我的评论所说,我从@ ephemient得到了这个.作为bash的初学者,我发现你的(可能更正确)解决方案远没有那么易读和可用.它们在功能上可能相同,但我发现这种语法更清晰. (6认同)
  • 最干净,最简单的解决方案,+ 1! (3认同)

Kim*_*Kha 18

简单命令:

rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
Run Code Online (Sandbox Code Playgroud)

祝好运!


mop*_*oke 12

cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个,因为"rm"没有"-r",这对于这个特定任务来说不是必需的. (2认同)

Dav*_*rby 6

你可以切换到zsh而不是bash.这允许您使用**来匹配目录树中任何位置的文件:

$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
Run Code Online (Sandbox Code Playgroud)

你也可以像这样组合它们:

$ rm /var/www/html/**/(_*|.DS_Store)
Run Code Online (Sandbox Code Playgroud)

Zsh还有许多其他功能,bash缺乏这些功能,但仅有一个功能值得进行切换.它可用于大多数(可能是所有)Linux发行版,以及cygwin和OS X.

您可以在zsh站点上找到更多信息.