使用正则表达式的git mv命令?

4

我想将许多小的应用程序目录移动到一个名为snippet-apps的单个目录中。我想使用git mv,因为我可以将它们作为移动而不是删除和创建进行提交。

我无法弄清如何使用正则表达式,所以我这样做:

for dir in *; do 
   if [[ $dir != snippet-apps ]]; 
      then git mv  $dir snippet-apps/ ; 
   fi; 
done

虽然我不是CLI和bash的大师,但这个或使用xargs是一个解决方法,并且它可以工作,但我希望有git mv <regex>的方式。

有没有一种使用git mv <regex>的方法?或者更简单的解决方案?


你遇到了什么错误?有什么问题吗? - Matt Clark
Git不会在路径名上“执行”正则表达式,但这种*本来就不是正则表达式:它是一个shell glob。话虽如此,在这里使用xargs或简单的shell循环是最好的选择。 - torek
2
如果你想要过于花哨的话:git mv $(ls | grep -v snippet-apps) snippet-apps/ 也可以工作。这是因为 git mv 和普通的 mv 一样,允许你指定多个路径移动到单个目录中。 - torek
@torek 是的,这似乎比我的过于复杂的例子简单得多了。不错。 - Michael Bruce
@MattClark 没问题。只是在寻找更简单的方法,比如torek的例子。 - Michael Bruce
2个回答

1

"git rm" 提供的仅是 路径名扩展,而非正则表达式。

您可以编写 Bash 脚本,在工作目录下移动任何您想要的文件,然后运行 "git add --all" 来收集所有修改。


git add --all 似乎只显示“删除”和创建的目录,而不是“重命名”或移动的目录。--all 有什么特别之处吗? - Michael Bruce

0
你可以使用扩展的 glob(需要 shopt -s extglob 选项)来完成它:
git mv !(snippet-apps)/ snippet-apps/

!(pattern) 匹配除了 pattern 以外的所有内容,并且附加的斜杠确保我们只匹配目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接