【问题标题】:Bash script to recursively step through folders and delete files用于递归遍历文件夹并删除文件的 Bash 脚本
【发布时间】:2010-09-01 01:16:36
【问题描述】:

谁能给我一个 bash 脚本或一行命令,我可以在 linux 上运行以递归方式遍历当前文件夹中的每个文件夹并删除所有以 '._' 开头的文件或目录?

【问题讨论】:

  • 仅供参考:._ 文件称为 AppleDouble 文件。在 Mac 系统上,文件有一个数据分支和一个资源分支。资源分支通常保存诸如图标、文件在文件夹中的空间位置(在 Finder 中)和其他元数据等信息。数据分叉(实际文件)包含实际的重要数据,因此丢弃 AppleDouble 文件应该没有问题。

标签: linux bash


【解决方案1】:

把目录改成你想要的根目录(或者把.改成目录)并执行:

find . -name "._*" -print0 | xargs -0 rm -rf

xargs 允许您将多个参数传递给单个命令,因此它比使用 find -exec 语法更快。此外,您可以在不使用| 的情况下运行一次以查看它将删除的文件,确保它是安全的。

【讨论】:

  • 这会被带空格的文件名混淆,如果您正在处理来自 Mac 环境的文件,这很常见。对findxargs (find . -name "._*" -print0 | xargs -0 rm -rf) 使用空分隔符选项可避免此问题。
  • 为什么不使用-delete 选项?
【解决方案2】:
find . -name '._*' -exec rm -Rf {} \;

【讨论】:

  • 可能想用./而不是/
  • 作者要求“从根文件夹遍历每个文件夹”。
  • 根文件夹和 a 根文件夹之间存在细微差别。
  • 对不起,有点模棱两可,不是指根文件夹,所以 ./ 会更合适。
【解决方案3】:

前段时间我遇到过类似的问题(我假设您正在尝试清理连接到 Mac 的驱动器,该驱动器保存了大量这些文件),所以我编写了一个简单的 python 脚本来删除这些文件和其他无用文件;也许对你有用:

http://github.com/houbysoft/short/blob/master/tidy

【讨论】:

  • 是的,你猜对了。据说苹果正在寻求修复它以使 Mac 更加“网络友好”。
【解决方案4】:
find /path -name "._*" -exec rm -fr "{}" +;

【讨论】:

    【解决方案5】:

    您可以将它们与相应的文件合并,而不是删除 AppleDouble 文件。你可以使用dot_clean

    dot_clean -- 将 ._* 文件与相应的本机文件合并。

    对于每个目录,dot_clean 根据给定参数指定的规则递归地将所有 ._* 文件与其对应的本机文件合并。默认情况下,如果本机文件上的某个属性也存在于 ._ 文件中,则将使用最新的属性。

    如果没有给出操作数,则输出使用消息。如果给出了多个目录,则按照指定的顺序合并目录。

    因为 dot_clean 默认递归工作,所以使用:

    dot_clean <directory>
    

    如果要关闭递归合并,请使用-f 进行平面合并。

    dot_clean -f <directory>
    

    【讨论】:

      【解决方案6】:

      find . -name '.*' -delete

      非常很长的文件列表的情况下更短一点并且性能更好。

      【讨论】:

      • 不! .* 会删除你所有的点文件,你需要它们!!!不要做这种人。这是个坏主意。
      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2011-12-25
      • 2014-03-29
      • 2015-05-18
      相关资源
      最近更新 更多