递归删除文件

时间:2010-01-06 22:34:04

标签: linux bash

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

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

12 个答案:

答案 0 :(得分:167)

切换到目录,然后使用:

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

未经测试,首先尝试不使用xargs!

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

find /dir/here ...

答案 1 :(得分:94)

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

答案 2 :(得分:84)

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

find . -name ".DS_Store" -delete

添加-print以获取删除列表。

如果你有一个最新的POSIX系统,

命令对你有用,我相信。至少它适用于OS X 10.8,适用于在macOS 10.12(Mojave)上测试过的其他人。

在@ X-Istence的帖子评论中感谢@ephemient(认为这有助于保证自己的答案)。

答案 3 :(得分:18)

简单命令:

rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
祝你好运!

答案 4 :(得分:12)

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

答案 5 :(得分:6)

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

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

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

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

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

您可以在zsh site找到更多信息。

答案 6 :(得分:4)

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

答案 7 :(得分:3)

删除" Thumbs.db"的示例递归;

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

通过以下方式验证:

find . -iname "Thumbs.db"

现在应该在当前路径中不显示带有" Thumbs.db"的任何条目。

答案 8 :(得分:3)

最好通过将-print添加到this answer

来查看正在删除的内容
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print

答案 9 :(得分:2)

如果你有Bash 4.0 ++

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

答案 10 :(得分:1)

有几点需要注意:

' - 删除'不是递归的。因此,如果.TemporaryItems(文件夹)中包含文件,则命令失败。

macs创建了很多这些讨厌的文件: .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 {} \;

答案 11 :(得分:0)

这也有效:

sudo rm -rf 2018-03-*

这里删除的文件名称格式为2018-03-(其他)

保持简单