2014-10-30 88 views
1

我知道命令ls-files生成一个文件列表,您可以在for循环中使用它来过滤和重命名所有文件,但是只有目录的命令是什么?我试图将字符串“-dcmp”附加到项目中的所有目录名称。Git - 如何重命名多个文件夹?

回答

1

没有特别的理由要用git来做这件事,而不是用通常的bash工具。具体而言,我只想用find,我自己,因为这是我已经习惯了使用做类似的事情很多不同的文件的工具:

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

的我想用git来做这件事的原因是,它会将更改记录为重命名,而不是文件删除/添加。我假设,因为这使用mv命令,git会将其识别为重命名......我有点累,所以我无法破译这个atm。 – 2014-10-30 02:28:25

+0

这只需要为存储库中的每个目录'x'调用一次'git mv x x-dcmp'。 – amalloy 2014-10-30 02:29:15

+0

好吧,它现在对我来说很神奇,但它工作。谢谢。 – 2014-10-30 02:33:11

0

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

有点简化,目录只作为文件的路径相关。
但这意味着没有空目录。如果列出所有文件,则会显示所有目录。
您可以切断文件名部分以获取所有目录。

喜欢的东西

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

列出了包含上市acording到特定的选项(...)文件中的所有目录。
(这不空格在文件名中的工作 - 你会发现,空间线报,并引号在线路乱了-u--unique)开始。)

(如果你想在工作所有目录在你的工作拷贝(这是我后来发现),没有任何关系由git ls-files各种选项列出的文件子集,你可能并不需要,在所有和答案使用find更加清晰。)