递归删除文件

有没有人有办法去除那些讨厌的。然后。将文件从 Mac 移动到 Linux 服务器后获得的 DS _ Store 文件?

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

101328 次浏览
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
find . -name "FILE-TO-FIND"-exec rm -rf {} \;

更改到目录,并使用:

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

没有测试,先试试没有 Xargs 的!

您可以将 find 之后的句点替换为目录,而不是首先更改为目录。

find /dir/here ...

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

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

你也可以这样组合它们:

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

Zsh 还有许多 bash 缺少的其他特性,但是只有这一个特性是值得进行转换的。它可以在大多数(可能是所有) Linux 发行版中使用,也可以在 cygwin 和 OSX 中使用。

你可以在 Zsh 站点上找到更多的信息。

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

如果你有 Bash 4.0 + +

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

简单的命令:

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

祝你好运!

更新的 findutils 支持 -delete,因此:

find . -name ".DS_Store" -delete

添加 -print也可以获得删除列表。

如果您有一个最新的 POSIX 系统,命令将为您工作,我相信。至少它在 OS X 10.8上对我有用,对其他在 macOS 10.12(Mojave)上测试过它的人也有用。

来自@ephemient 对@X-Istence 的帖子的评论(认为它足够有帮助,值得自己给出答案)。

有几点需要注意:

“-delete”不是递归的。因此,如果。

有很多这种讨厌的文件是由 mac 创建的: 。 DS _ 商店 商店 。临时项目 。 apdisk

这个命令可以解决所有问题。

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

递归删除“ Thumbs.db”的示例;

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

验证:

find . -iname "Thumbs.db"

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

最好是通过向 这个答案中添加-print 来查看删除了什么

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

这也行得通:

sudo rm -rf 2018-03-*

这里你删除的文件格式为2018-03-(其他东西)

简单点