【发布时间】:2011-07-01 00:06:02
【问题描述】:
我一直在寻找一段时间,但似乎无法得到一个简洁的解决方案。我有一台 Mac,其中有一个文件夹,我想清除所有隐藏的文件/目录 - 任何隐藏的东西。它曾经是一个包含大量 .metadata/.svn 内容的 Eclipse 工作区,我对所有这些都被删除没意见。我该如何做到这一点(使用 shell 脚本、Applescript 等)。提前非常感谢!
【问题讨论】:
我一直在寻找一段时间,但似乎无法得到一个简洁的解决方案。我有一台 Mac,其中有一个文件夹,我想清除所有隐藏的文件/目录 - 任何隐藏的东西。它曾经是一个包含大量 .metadata/.svn 内容的 Eclipse 工作区,我对所有这些都被删除没意见。我该如何做到这一点(使用 shell 脚本、Applescript 等)。提前非常感谢!
【问题讨论】:
find . -name ".*" -print
我不知道 MAC 操作系统,但这是您在大多数 *nix 环境中找到它们的方式。
find . -name ".*" -exec rm -rf {} \;
要删除它们...首先查找并确保该列表是您想要的,然后再将它们全部删除。
第一个"." 表示来自您的当前目录。另请注意,第二个".*" 可以更改为".svn*" 或任何其他更具体的名称;上面的语法只查找所有隐藏文件,但您可以更有选择性。我一直使用它来删除旧代码中的所有 .svn 目录。
【讨论】:
.)。
find . -name ".*.*" -print 将查找文件名中至少包含一个点的任何文件。
\;
您需要非常小心并测试您使用的任何命令,因为您可能不想删除当前目录 (.)、父目录 (..) 或所有文件。
这应该只包括以点开头的文件和目录,不包括. 和..。
find . -mindepth 1 -name '.*' -delete
【讨论】:
rm -rf `find . -type f -regex '.*/\.+.+'`
如果要删除目录,请将-type f 更改为-type d。
如果你想删除文件和目录删除-type f
【讨论】:
find /path -iname ".*" -type f -delete ;
Ruby(1.9+)
ruby -rfileutils -e 'Dir["**/.*"].each{|x| FileUtils.rm(x) if File.file?(x)}'
【讨论】:
find 命令中指定-type d 来实现
-iname 在你不需要的时候可能会慢一点。如果包含-type d 和以. 开头的名称,它可能会尝试删除名为. 的当前目录。
我使用这个命令来删除空目录。它从底部开始,一直到顶部。因此,如果您引用当前路径,它不会失败。
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
【讨论】: