【问题标题】:Add destination folder when batch cloning git repositories using shell script使用 shell 脚本批量克隆 git 存储库时添加目标文件夹
【发布时间】:2020-10-04 11:50:56
【问题描述】:

我正在尝试从 GitHub 克隆一组存储库。它可以工作,但我不知道如何使用xargs 添加目标文件夹。这是我目前拥有的

curl "https://api.github.com/orgs/$org/repos?access_token=$authToken" |
  grep -e 'clone_url*' | 
  grep -w clone_url | 
  grep -o '[^"]\+://.\+.git' |
  xargs -L1 git clone

除了我希望克隆的存储库进入另一个目录./my_folder。我试过改变最后一行:

xargs -L1 git clone "./my_folder"

但这不起作用。我不知道如何使用xargs 添加额外的参数。正常的方法是将目标文件夹添加到命令的末尾,如this answer,但我无法完全弄清楚如何使用我的代码执行此操作。

【问题讨论】:

  • 你可以试试xargs -L1 -I {} git clone {} "./my_folder"
  • 谢谢@Inian!这完美无缺。你想把它作为一个答案,我会标记为正确吗?
  • @alaniwi:请随时根据您的观察添加答案。
  • 我现在添加了一个单独的答案(因此删除了我上面的 cmets)。

标签: git sh xargs


【解决方案1】:

这里的问题是每个git clone 操作的目标文件夹需要是my_folder 的单独子目录,其名称可能类似于git URL 的基本名称部分。使用xargs 可能很难实现这一点,因此我建议使用显式循环代替 xargs:

... | while read repo_url ; do git clone $repo_url my_folder/$(basename $repo_url) ; done

这是在curlgrep 命令之后的管道末尾。

如果愿意,您当然可以去掉 .git,将 $(basename $repo_url) 替换为

$(basename $repo_url | sed 's/\.git$//')`

为方便起见,将它们放在一起:

curl "https://api.github.com/orgs/$org/repos?access_token=$authToken" | \
  grep -e 'clone_url*' | \
  grep -w clone_url | \
  grep -o '[^"]\+://.\+.git' | \
  while read repo_url
  do 
      git clone $repo_url my_folder/$(basename $repo_url | sed 's/\.git$//')
  done

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 2016-11-11
    • 2019-05-09
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    相关资源
    最近更新 更多