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 {} \;