我有大约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”等消息
答案 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_/}'