【发布时间】:2014-12-25 23:04:45
【问题描述】:
我知道命令ls-files 会生成一个文件列表,您可以在 for 循环中使用该列表来过滤和重命名所有文件,但是仅针对目录的命令是什么?我正在尝试将字符串“-dcmp”附加到项目中的所有目录名称中。
【问题讨论】:
我知道命令ls-files 会生成一个文件列表,您可以在 for 循环中使用该列表来过滤和重命名所有文件,但是仅针对目录的命令是什么?我正在尝试将字符串“-dcmp”附加到项目中的所有目录名称中。
【问题讨论】:
没有特别的理由使用 git 来执行此操作,而不是使用通常的 bash 工具。具体来说,我自己会使用find,因为它是我用来对许多不同文件执行类似操作的工具:
$ find . -name .git -prune -or -type d -exec git mv '{}'{,-dcmp} \;
【讨论】:
x 调用一次git mv x x-dcmp。
.git 目录,如果你在你的 repo 的根目录中运行它可能会造成一些严重破坏。
.git 中的任何东西。
作为git 基本设计的一部分,它不管理目录。
有些简化,目录仅与文件路径相关。
但这意味着没有空目录。如果列出所有文件,则会显示所有目录。
可以截掉文件名部分来获取所有目录。
有点像
git ls-files ... | sed 's|/[^/]*$||' | sort -u
列出包含根据特定选项列出的文件的所有目录 (...)。
(这不适用于文件名中的空格 - 您会注意到带空格的行被引用,并且行首的引号会混淆 -u (--unique)。)
(如果您想在工作副本中处理 all 目录(我稍后注意到),与 git ls-files 的各种选项列出的文件子集没有任何关系,您可能不需要完全如此,使用find 的答案更清楚。)
【讨论】: