Git move&使用Bash提交与字符串匹配的所有目录

时间:2014-03-03 12:11:43

标签: windows git bash git-bash

我有大约150个目录,我想在git仓库中重命名(和提交)。路径类似于;

/src/app/testing/linux/testindexscreen_home/image.png
/src/app/testing/osx/testindexscreen_home/image.png
/src/app/testing/win/testindexscreen_home/image.png

所以我想在匹配mv的所有路径上运行commit然后indexscreen_以删除字符串的那一部分。

我在一个窗口框上,使用git bash,目前有找到& mv命令试图将文件夹移动到自身。我不确定你是如何删除匹配的字符串的;

find . -name '*indexscreen_*' -exec sh -c 'file={}; git mv $file ${file/"*indexscreen_*"/}' \;

我认为需要包含提交内容;

find . -name '*indexscreen_*' -exec sh -c 'file={}; git mv $file ${file/"*indexscreen_*"/}; git commit -m "Renamed $file"' \;

所以我想让bash命令将这些路径转换为;

/src/app/testing/linux/testhome/image.png
/src/app/testing/osx/testhome/image.png
/src/app/testing/win/testhome/image.png

并提交“重命名的testhome”等消息

2 个答案:

答案 0 :(得分:1)

所以我对bash的理解在这方面没有太大改进(我需要找到一些好的文档),但我已经弄明白我正在运行的问题。

将我的mv命令改为以下命令,成功地重命名了我想要的目录;

find . -name '*indexscreen_*' -exec sh -c 'file={}; git mv $file ${file/indexscreen_/}' \;

答案 1 :(得分:0)

我认为这可以满足您的需求:

find . -name "*indexscreen_*" -a -type d -exec sh -c 'n={}; git mv {} ${n/indexscreen_/}' \;

但是当我发现正在运行时我的文件消失了,我的发现就会抱怨。

使用xargs的相同解决方案不会抱怨:

find . -name "*indexscreen_*" -a -type d |xargs -i sh -c 'n={}; git mv {} ${n/indexscreen_/}'