【问题标题】:Git - how to rename many folders?Git - 如何重命名许多文件夹?
【发布时间】:2014-12-25 23:04:45
【问题描述】:

我知道命令ls-files 会生成一个文件列表,您可以在 for 循环中使用该列表来过滤和重命名所有文件,但是仅针对目录的命令是什么?我正在尝试将字符串“-dcmp”附加到项目中的所有目录名称中。

【问题讨论】:

    标签: git bash rename


    【解决方案1】:

    没有特别的理由使用 git 来执行此操作,而不是使用通常的 bash 工具。具体来说,我自己会使用find,因为它是我用来对许多不同文件执行类似操作的工具:

    $ find . -name .git -prune -or -type d -exec git mv '{}'{,-dcmp} \;
    

    【讨论】:

    • 我想用 git 做这件事的原因是它将更改记录为重命名而不是文件删除/添加。我假设因为这使用了 mv 命令,git 会将其识别为重命名...我有点累,所以我在破译这个 atm 时遇到了麻烦。
    • 这只是为您存储库中的每个目录x 调用一次git mv x x-dcmp
    • 效果很好,现在对我来说很神奇,但效果很好。谢谢。
    • 我添加了一个东西来避免进入 .git 目录,如果你在你的 repo 的根目录中运行它可能会造成一些严重破坏。
    • 我在你编辑它之前运行了它,它似乎根本没有影响.git 中的任何东西。
    【解决方案2】:

    作为git 基本设计的一部分,它不管理目录。

    有些简化,目录仅与文件路径相关。
    但这意味着没有空目录。如果列出所有文件,则会显示所有目录。
    可以截掉文件名部分来获取所有目录。

    有点像

    git ls-files ... | sed 's|/[^/]*$||' | sort -u
    

    列出包含根据特定选项列出的文件的所有目录 (...)。
    (这不适用于文件名中的空格 - 您会注意到带空格的行被引用,并且行首的引号会混淆 -u (--unique)。)

    (如果您想在工作副本中处理 all 目录(我稍后注意到),与 git ls-files 的各种选项列出的文件子集没有任何关系,您可能不需要完全如此,使用find 的答案更清楚。)

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2011-11-04
      • 2016-04-15
      • 2021-04-02
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多