使用 shell 脚本批量克隆 git 个存储库时添加目标文件夹

Add destination folder when batch cloning git repositories using shell script

我正在尝试从 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 一样将目标文件夹添加到命令的末尾,但我不太清楚如何使用我的代码执行此操作。

这里的问题是每个 git clone 操作的目标文件夹需要是 my_folder 的单独子目录,其名称可能类似于 [=28= 的基本名称部分] 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