给定一个colab笔记本的列表,我如何使用wget或curl下载其中每个笔记本的ipynb?
- https://colab.research.google.com/notebooks/gpu.ipynb
- https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_arbitrary_image_stylization.ipynb
- https://colab.research.google.com/drive/1sVsoBd9AjckIXThgtZhGrHRfFI6UUYOo
这个问题解释了如何下载存储在gdrive上的笔记本电脑,但存储在github或colab目录(colab.research.google.com/notebooks/(或其他来源的笔记本电脑呢?
假设所有目标url都在一个文本文件中,我建议有两个选项。将代码保存到.sh文件(例如dlnb.sh
(中,并将所有URL保存在类似的文本文件(例如,list.txt
(中
https://colab.research.google.com/notebooks/gpu.ipynb
https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_arbitrary_image_stylization.ipynb
https://colab.research.google.com/drive/1sVsoBd9AjckIXThgtZhGrHRfFI6UUYOo
tl;dr:我建议使用使用gdown的解决方案2(只需运行pip install gdown
(。由于wget无法保存url没有其名称的笔记本。然后在终端中运行bash dlnb.sh list.txt
1.wget
和cat
。这一个有一个原始链接,我们只使用wget,所以没有名称的链接将保存为random_id_here.ipynb
dlnb.sh
grabid() { fileid=$( echo "$1" | egrep -o '(w|-){26,}' ); echo $fileid; }
cat $1 | while read line || [[ -n $line ]];
do
if [[ $line != *.ipynb ]]; then
id=$(grabid "$line")
wget -O $id.ipynb 'https://docs.google.com/uc?export=download&id='$id;
else
wget $line;
fi;
done
我取这个reg ex,它是egrep -o '(w|-){26,}'
,并将其插入我的函数中,它将从链接中提取并返回id
grabid() { fileid=$( echo "$1" | egrep -o '(w|-){26,}' ); echo $fileid; }
通过调用grabid()
分配id,line
是url
id=$(grabid "$line")
然后使用while read line || [[ -n $line ]];
循环通过每个line
并使用wget下载,您可以在这里的代码中看到while循环的解释
wget -O $id.ipynb 'https://docs.google.com/uc?export=download&id='$id;
或
2.通过安装gdown获得更好的解决方案。这与解决方案1类似,但使用gdown
而不是wget
dlnb.sh
grabid() { fileid=$( echo "$1" | egrep -o '(w|-){26,}' ); echo $fileid; }
cat $1 | while read line || [[ -n $line ]];
do
if [[ $line != *.ipynb ]]; then
gdown $(grabid "$line");
else
gdown $line;
fi;
done
如果url不是以.ipynb-if [[ $line != *.ipynb ]];
结尾,那么gdown将获取id$(grabid "$line");
并下载它,而解决方案1将把笔记本保存为id_of_notebook
。ipynb.gdown
将保存为其名称。