如何recursion删除UNIX上目录中的所有隐藏文件?

我一直在寻找一段时间,但似乎无法得到一个简洁的解决scheme。 我有一个Mac文件夹,我想清除所有隐藏的文件/目录 – 任何隐藏的。 它曾经是一个有很多.metadata / .svn东西的Eclipse工作区,我很好,所有的东西都被删除了。 我怎么能做到这一点(无论是与shell脚本,苹果脚本等)。 提前感谢!

find . -name ".*" -print

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

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

摆脱他们… 做第一次查找,并确保列表是你想要的,然后再删除它们

第一个"." 意味着从你当前的目录。 还要注意第二个".*"可以改成".svn*"或其他更具体的名字; 上面的语法只是找到所有隐藏的文件,但是你可以更有选择性。 我一直用这个来删除旧代码中的所有.svn目录。

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

这应该只包括以点和排除开头的文件和目录...

 find . -mindepth 1 -name '.*' -delete 
 rm -rf `find . -type f -regex '.*/\.+.+'` 

如果要删除目录,请将type -d更改为-type f

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

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

红宝石(1.9+)

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

我使用这个命令来删除空目录。 它从底部开始,到达顶端。 所以,如果您引用当前路径,则不会失败。

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

我发现这工作得很好(至少在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