使用 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
这是在 curl
和 grep
命令之后的管道末尾。
如果愿意,您当然可以去掉 .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
我正在尝试从 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
这是在 curl
和 grep
命令之后的管道末尾。
如果愿意,您当然可以去掉 .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