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



我正在尝试从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添加额外的参数。正常方法是将目标文件夹添加到命令的末尾,就像这个答案一样,但我不能完全弄清楚如何使用我的代码做到这一点。

这里的问题是每个git clone操作的目标文件夹需要是一个单独的子目录my_folder,其名称可能类似于 git URL 的 basename 部分。 这可能很难使用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

最新更新