如何以递归方式删除UNIX上目录中的所有隐藏文件?

时间:2011-02-21 02:06:46

标签: macos shell unix

我一直在寻找,但似乎无法得到一个简洁的解决方案。我有一个Mac文件夹,我想要清除所有隐藏的文件/目录 - 任何隐藏的东西。它曾经是一个带有很多.metadata / .svn东西的Eclipse工作区,我很好,所有这些都被删除了。我该怎么做(使用shell脚本,Applescript等)。非常感谢提前!

6 个答案:

答案 0 :(得分:48)

find . -name ".*" -print

我不知道MAC OS,但这就是你在大多数* nix环境中找到它们的方法。

find . -name ".*" -exec rm -rf {} \;

摆脱它们...... 首先找到并确保列表是你想要的全部删除之前

第一个"."表示当前目录。另请注意,第二个".*"可以更改为".svn*"或任何其他更具体的名称;上面的语法只是找到所有隐藏文件,但你可以更有选择性。我一直用它来删除旧代码中的所有.svn目录。

答案 1 :(得分:12)

您需要非常小心并测试您使用的任何命令,因为您可能不想删除当前目录(.),父目录(..)或所有文件。 / p>

这应仅包含以点开头的文件和目录,并排除...

find . -mindepth 1 -name '.*' -delete

答案 2 :(得分:3)

rm -rf `find . -type f -regex '.*/\.+.+'`

如果要删除目录,请更改-type f的{​​{1}}。

如果要删除文件和目录,请删除type -d

答案 3 :(得分:1)

find /path -iname ".*" -type f -delete ;

红宝石(1.9 +)

ruby -rfileutils -e 'Dir["**/.*"].each{|x| FileUtils.rm(x) if File.file?(x)}'

答案 4 :(得分:0)

我使用此命令删除空目录。它从底部开始,一直向上移动。因此,如果您引用当前路径,它不会失败。

find . -depth -type d -empty -exec rmdir {} \;

答案 5 :(得分:0)

我发现这个工作得很好(至少在Linux上使用Bash):

find . -wholename '*/.*' -type f | sed -n '/\/\.[^\/]\+$/p' | xargs rm

您可以在sed调用您喜欢的内容中调整正则表达式。

但要小心:在我的情况下,我有很多必须保留的名为.gitignore.gitkeep的隐藏文件。请务必查看列表,看看是否有任何想要保留的内容。

我发现此变体非常有用,它会删除._ANYTHING之类的文件(通常是已删除或tmp文件):

find . -wholename '*/.*' -type f | sed -n '/\/\._[^\/]\+$/p' | xargs rm
相关问题