【问题标题】:rm -rf (remove) command does not work for too-deeply-nested foldersrm -rf(删除)命令不适用于嵌套太深的文件夹
【发布时间】:2019-03-10 20:19:03
【问题描述】:

我不小心在 Cirrus 的 Git Bash 上复制了太多次名为“cdout”的文件夹,如下所示。

user/aa/cdout/cdout/cdout/cdout/cdout/cdout/cdout/cdout/cdout/cdout/cdout/cdout(还有很多/cdout)

我想删除所有这些,而保留 /aa/cdout 不变。 我运行命令 rm -rf ~/aa/cdout/cdout 但它根本不起作用。 cdout 文件夹中的 cdout 文件夹中仍有 cdout 文件夹。我看不出运行此命令之前和之后的任何区别。

任何帮助将不胜感激。我对命令行很陌生,真的不知道下一步该做什么。

【问题讨论】:

  • 只是一种预感,但我认为在某些文件系统上存在最大文件路径长度。如果你的嵌套太深,rm 会尝试访问路径名太长的文件夹。
  • 这很可能是平台可移植性问题——Windows 上的某些文件名可以通过较新的/NT 时代的系统调用访问,但不能通过使用较旧内核接口的软件访问。因此,您需要使用来自同一个世界的工具来解决问题。
  • 也就是说,一种合理的方法是缩短名称。如果你可以mv ~/aa/cdout/cdout/cdout/cdout ~/cdout.4,那么你应该可以rm -rf ~/aa/cdout,并重复cdout.4中的目录。

标签: git-bash rm cirrus-hpc


【解决方案1】:

尝试使用rsync。它 CPU 密集型的,但我建议您使用它,因为rm -rf 不起作用。这是语法: rsync -a --delete empty/ your_folder/.

来源:

【讨论】:

  • 你有任何理由相信 rsync 不会调用 rm 使用的完全相同的系统调用,但失败了?
  • 根据我读过的文章(我曾经遇到过类似的问题),它有效。有时它可能会向您抛出一个错误,说某些文件夹由于某些文件类型而无法删除。查看 Stack Exchange 上类似问题的第一个来源。
  • 第一个链接根本不相似——他们的问题只是使用-exec ... {} \;而不是-exec ... {} +,因此每个要删除的文件调用一个rm。这确实很慢,但是一种缓慢的方法与描述的完全没有发生的行为非常不同。同样,嵌套深度也不是问题。
  • 刚刚意识到-谢谢!
猜你喜欢
  • 2015-08-17
  • 2012-05-13
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2012-10-05
  • 2011-02-28
相关资源
最近更新 更多