【问题标题】:git mv with regex?git mv 与正则表达式?
【发布时间】:2017-07-03 12:09:01
【问题描述】:

我想将相当多的小应用程序目录移动到一个名为 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>?还是更简单的解决方案?

【问题讨论】:

  • 你有什么错误?有什么问题?
  • Git 不会在路径名上“做”正则表达式,但这种* 首先不是正则表达式:它是一个shell glob。也就是说,无论如何,使用 xargs 或简单的 shell 循环都是可行的方法。
  • (如果你想变得过于花哨:git mv $(ls | grep -v snippet-apps) snippet-apps/ 也可以。这是因为git mv 和普通的mv 一样,允许您指定多个路径以移动到单个目录。 )
  • @torek 是的,这似乎比我过于复杂的示例要简单得多。不错。
  • @MattClark 没问题。只是在寻找更简单的方法,比如torek的例子。

标签: regex linux git bash for-loop


【解决方案1】:

“git rm”提供的只是Pathname expansion,不是正则表达式。

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

【讨论】:

  • git add --all 似乎只显示“已删除”和创建的目录,而不是“重命名”或移动。 --all 有什么特别之处吗?
【解决方案2】:

您可以使用扩展的 glob 来实现(需要 shopt -s extglob 选项):

git mv !(snippet-apps)/ snippet-apps/

!(pattern) 匹配除pattern 之外的所有内容,附加的斜线确保我们只匹配目录。

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 2010-09-12
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2011-01-04
    • 2017-12-18
    相关资源
    最近更新 更多