Bash:recursion删除文件

有没有人有一个解决scheme,以消除那些讨厌的._和.DS_Store文件后,将文件从Mac移动到Linux服务器?

指定一个开始目录,让它去? 像/ var / www / html / down …

转到目录,并使用:

find . -name ".DS_Store" -print0 | xargs -0 rm -rf find . -name "._*" -print0 | xargs -0 rm -rf 

未经testing,请先尝试不使用xargs!

您可以将查找后的时间replace为目录,而不是先切换到目录。

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

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

 find . -name ".DS_Store" -delete 

我相信如果你有一个最新的POSIX系统将会为你工作。 至less它适用于OS X 10.8,

感谢@ephemient在@ X-Istence的post上的评论(认为这足以certificate自己的答案)。

简单的命令:

 rm `find ./ -name '.DS_Store'` -rf rm `find ./ -name '._'` -rf 

祝你好运!

 cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm 

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

 $ rm /var/www/html/**/_* /var/www/html/**/.DS_Store 

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

 $ rm /var/www/html/**/(_*|.DS_Store) 

Zsh还有许多其他的function,但是仅此一项就值得转换。 它在大多数(可能是所有)Linux发行版中都可用,以及cygwin和OS X.

您可以在zsh网站上find更多信息。

 find . -name "FILE-TO-FIND"-exec rm -rf {} \; 

示例recursion删除“Thumbs.db”;

 find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf 

validation方式:

 find . -iname "Thumbs.db" 

现在应该在当前path中不显示任何带有“Thumbs.db”的条目。

通过在此答案中添加-print,最好查看要删除的内容

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

如果你有Bash 4.0 ++

 #!/bin/bash shopt -s globstar for file in /var/www/html/**/.DS_Store /var/www/html/**/._ do echo rm "$file" done 

有几件事要注意:

“删除”不是recursion的。 所以如果.TemporaryItems(文件夹)中有文件,命令失败。

有很多这些麻烦的文件由mac创build:.DS_Store ._。DS_Store .TemporaryItems .apdisk

这一个命令解决了所有这些问题。 保存一遍又一遍地查找多个匹配。

 find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;