如何递归删除UNIX上某个目录中的所有隐藏文件?

2g32fytz  于 2022-11-04  发布在  Unix
关注(0)|答案(6)|浏览(134)

我已经搜索了一段时间,但似乎不能得到一个简洁的解决方案.我有一个Mac的文件夹,我想清理所有隐藏的文件/目录-任何隐藏的东西.它曾经是一个Eclipse的工作区,有很多.metadata/.svn的东西,我很好,所有这些都被删除.我怎么能做到这一点(无论是用shell脚本,Applescript等).提前感谢!

cigdeys3

cigdeys31#

find . -name ".*" -exec rm -rf {} \;
我不知道MAC操作系统,但这就是你在大多数 *nix环境中找到它们的方式。
find . -name ".*" -exec rm -rf {} \;
为了摆脱他们...做第一次查找,并确保该列表是你想要的,然后才删除他们所有
第一个"."意味着来自你当前的目录。还要注意第二个".*"可以改为".svn*"或者其他任何更具体的名字;上面的语法只是查找所有隐藏文件,但是你可以更有选择性.我经常使用这个语法来删除旧代码中所有的.svn目录.

lo8azlld

lo8azlld2#

您需要非常小心地测试您使用的任何命令,因为您可能不希望删除当前目录(.)、父目录(..)或所有文件。
这应该只包括以点开始的文件和目录,不包括...

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

kse8i1jr3#

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

如果要删除目录,请将-type f更改为-type d
如果要删除文件和目录,请删除-type f
更新感谢评论者:对于包含空格的文件或目录,此操作失败。请使用a better answer

v9tzhpje

v9tzhpje4#

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

Ruby(1.9+)

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

bf1o4zei5#

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

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

g2ieeal76#

我发现这非常好用(至少在Linux上的Bash中是这样):

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

您可以根据自己的喜好调整sed调用中的正则表达式。
但要小心:在我的例子中,我有很多名为.gitignore.gitkeep的隐藏文件必须保留。2一定要检查列表,看看其中是否有您要保留的内容。
我发现这个变体非常有用,它可以删除像._ANYTHING这样的文件(通常是垃圾文件或临时文件):

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

相关问题