我已经搜索了一段时间,但似乎找不到一个简洁的解决方案。我有一个Mac电脑上的文件夹,我想清除所有隐藏文件/目录 - 任何隐藏的内容。它曾经是Eclipse工作区,有很多.metadata/.svn等内容,我希望全部清除。我该如何做到这一点(使用shell脚本,Applescript等)。提前感谢!
find . -name ".*" -print
这是在大多数* nix环境中查找它们所有隐藏文件的方法,其中“.”表示从当前目录开始。请注意,“.*”可以更改为“.svn *”或任何其他更具体的名称,以选择性地查找特定的隐藏文件。
find . -name ".*" -exec rm -rf {} \;
使用上述命令可以删除所有隐藏文件,请在删除之前先执行第一个查找命令,确保列表中包含您要删除的所有文件或目录。这个命令可能会搞砸你的系统,所以一定要小心!
你需要非常小心并测试任何你使用的命令,因为你可能不希望删除当前目录(.
)、父级目录(..
)或所有文件。
这应该仅包括以点开头的文件和目录,并排除.
和..
。
find . -mindepth 1 -name '.*' -delete
rm -rf `find . -type f -regex '.*/\.+.+'`
-type f
改为 -type d
。-type f
。rm
,find
,像Bash或sh
的shell和包含空格的文件(或目录)名称的系统上。例如,对于目录名“My Pictures”,您的命令将尝试从“My”和“Pictures”中删除文件,其中可能不存在任何一个。您应该使用find ... -exec ...
而不是命令替换。 - Dennis Williamsonfind /path -iname ".*" -type f -delete ;
Ruby(1.9+)
ruby -rfileutils -e 'Dir["**/.*"].each{|x| FileUtils.rm(x) if File.file?(x)}'
-iname
可能会慢一些。如果您包括 -type d
和以 .
开头的名称,则可能尝试删除名为 .
的当前目录。 - Dennis Williamson我发现这个方法在Linux的Bash中非常有效:
find . -wholename '*/.*' -type f | sed -n '/\/\.[^\/]\+$/p' | xargs rm
您可以根据自己的喜好调整sed
调用中的正则表达式。
但要小心:在我的情况下,我有很多名为.gitignore
或.gitkeep
的隐藏文件必须被保留。请务必检查列表,看看是否有任何您想保留的内容。
我发现这个变体非常有用,它可以删除像._ANYTHING
(通常是垃圾或临时文件)这样的文件:
find . -wholename '*/.*' -type f | sed -n '/\/\._[^\/]\+$/p' | xargs rm
find . -depth -type d -empty -exec rmdir {} \;
find . -name ".*.*" -print
将会查找文件名中至少包含一个点的任何文件。 - sakabako\;
- l0b0find
支持使用+
代替\;
,这样可以使命令更加高效。 - l0b0