这就是我如何从 GitHub 下载各种主分支,我的目标是有一个更漂亮脚本(也许更可靠?)。
wget -P ~/ https://github.com/user/repository/archive/master.zip
unzip ~/master.zip
mv ~/*-master ~/dir-name
可以用焦油和管道以某种方式将其缩短为一行吗?
请解决直接下载到主目录~/
并为目录指定特定名称的问题(mv
真的需要吗?)。
答案1
似乎您想要的最短路线是git clone https://github.com/user/repository --depth 1 --branch=master ~/dir-name
。这只会复制 master 分支,它会复制尽可能少的额外信息,并将其存储在~/dir-name
.
答案2
这会将文件克隆到它创建的新目录中:
git clone [email protected]:whatever NonExistentNewFolderName
答案3
让我们从我个人使用的 bash 函数开始:
wget_github_zip() {
if [[ $1 =~ ^-+h(elp)?$ ]] ; then
printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
return
fi
if [[ ${1} =~ /archive/master.zip$ ]] ; then
download=${1}
out_file=${1/\/archive\/master.zip}
out_file=${out_file##*/}.zip
elif [[ ${1} =~ .git$ ]] ; then
out_file=${1/%.git}
download=${out_file}/archive/master.zip
out_file=${out_file##*/}.zip
else
out_file=${1/%\/} # remove trailing '/'
download=${out_file}/archive/master.zip
out_file=${out_file##*/}.zip
fi
wget -c ${download} -O ${out_file}
}
您希望该文件始终名为 master.zip 并始终下载到您的主目录中,因此:
wget_github_zip() {
if [[ $1 =~ ^-+h(elp)?$ ]] ; then
printf "%s\n" "Downloads a github snapshot of a master branch.\nSupports input URLs of the forms */repo_name, *.git, and */master.zip"
return
fi
if [[ ${1} =~ /archive/master.zip$ ]] ; then
download=${1}
elif [[ ${1} =~ .git$ ]] ; then
out_file=${1/%.git}
download=${out_file}/archive/master.zip
else
out_file=${1/%\/} # remove trailing '/'
download=${out_file}/archive/master.zip
fi
wget -c ${download} -O ~/master.zip && unzip ~/master.zip && mv ~/master.zip ~/myAddons
}
但是,您需要考虑以下几点:
1) 我的原始脚本将为每个下载提供一个唯一的下载 zip 文件名,该文件名基于 github 存储库的名称,这通常是大多数人真正想要的,而不是调用所有内容master
并随后手动重命名它们以确保唯一性。在该版本的脚本中,您可以使用 $out_file 的值来唯一命名解压缩树的根目录。
2)如果您确实希望所有下载的zip
文件都被命名~/master.zip
,您是否想在解压缩后删除每个文件?
3)既然您似乎总是希望将所有内容都放在目录中~/myAddons
,为什么不在那里执行所有操作,并且省去移动解压目录的需要?
答案4
这里有几种下载+解压的方法单行命令:
# With WGET and JAR:
wget -O - https://github.com/user/repo/archive/master.zip | jar xv
# With WGET and TAR:
wget -O - https://github.com/user/repo/archive/master.tar.gz | tar xz
# With CURL and JAR:
curl -L https://github.com/user/repo/archive/master.zip | jar xv
# With CURL and TAR:
curl -L https://github.com/user/repo/archive/master.tar.gz | tar xz