如何在 .txt 文件中使用带有许多 URL 的 wget 下载并另存为
how to use wget with Many URL's in .txt file to download and save as
我有一个 txt 文件,其中包含太多要下载的直接链接,包括每个文件前面的每个文件名 url,txt 文件如下所示:
http://example.com/file1.png name_of_the_file1
http://example.com/file2.mp4 name_of_the_file2
http://example.com/file3.mkv name_of_the_file3
http://example.com/file4.png name_of_the_file4
http://example.com/file5.avi name_of_the_file5
如您所见,文件名和 url 由 space 分隔。
我想要的是一个 linux 命令,它输入包含 url 的 txt 文件并下载每个文件,然后使用 wget
.[= 将它们重命名为各自的名称14=]
请帮助我,任何帮助将不胜感激,谢谢!
注1:url和文件名
之间正好有一个space
注2:文件名可能包含spaces:见下面的例子
http://example.com/47188.png Abaixo de Zero (2021)
我能想到的最简单的事情是以下简单的 python 脚本:
import os
lines = open('<name_of_your_file>').readlines()
for line in lines:
url, file_name = line.strip().split(' ', 1)
os.system(f'wget {url} -o {file_name}')
如果一个人想要它在一个衬里 bash,下面的作品:
$ python -c "import os; lines = open('<name_of_your_file>').readlines(); [ os.system(f'wget {url} -o {file_name}') for url, file_name in [line.strip().split(' ', 1) for line in lines]]"
您可以使用此代码:
while IFS= read -r line; do
IFS=' '
read -a strarr <<< "$line"
wget -O ${strarr[1]} ${strarr[0]}
done < filename.txt
这是一个 bash 脚本。但如果你不知道如何使用它:
- 将其粘贴到 file.sh
- 运行这条命令才能执行:
chmod +x file.sh
- 执行:
./file.sh
P.S 不要忘记更改文件名以使用包含链接的实际文件名。
你可以使用这个 awk|xargs 一行:
awk '{url=; ="";{sub(/ /,"");out=url" -O \""[=10=]"\""}; print out}' file.txt | xargs -L 1 wget
解释:
url= # temp var inside awk
="" # replace url with null space
{sub(/ /,"");out=url" -O \""[=11=]"\""} # need to output var
sub(/ /,"") # need to trim leading white space
out=url" -O \""[=11=]"\"" # line formatting with escaping characters
print out # シ
xargs -L 1 wget # get awk output line by line to wget
plus some awk sintax sugar
示例:
cat << EOF >> file.txt
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz name_of_the_file2
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1j.tar.gz name of_the_file3
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz name of the_file4
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1h.tar.gz name of the file5
EOF
awk '{url=; ="";{sub(/ /,"");out=url" -O \""[=12=]"\""}; print out}' file.txt | xargs -L 1 wget
ls -1
name_of_the_file2
'name of_the_file3'
'name of the_file4'
'name of the file5'
while IFS= read -r line; do
IFS=' '
read -a strarr <<< "$line"
if [[ ${#strarr[@]} -gt 2 ]]
then
filename=''
for (( i=${#strarr[@]}; i>0; i-- ));
do
filename="${strarr[i]} $filename"
done
wget ${strarr[0]} -O "$filename"
else
wget ${strarr[0]} -O ${strarr[1]}
fi
done < filename.txt
此代码已修改,现在可以创建文件名中包含多个单词的文件。但是这段代码不是很清楚,因为我不知道 bash 脚本的所有功能。我实际上正在使用 python.
我有一个 txt 文件,其中包含太多要下载的直接链接,包括每个文件前面的每个文件名 url,txt 文件如下所示:
http://example.com/file1.png name_of_the_file1
http://example.com/file2.mp4 name_of_the_file2
http://example.com/file3.mkv name_of_the_file3
http://example.com/file4.png name_of_the_file4
http://example.com/file5.avi name_of_the_file5
如您所见,文件名和 url 由 space 分隔。
我想要的是一个 linux 命令,它输入包含 url 的 txt 文件并下载每个文件,然后使用 wget
.[= 将它们重命名为各自的名称14=]
请帮助我,任何帮助将不胜感激,谢谢!
注1:url和文件名
之间正好有一个space注2:文件名可能包含spaces:见下面的例子
http://example.com/47188.png Abaixo de Zero (2021)
我能想到的最简单的事情是以下简单的 python 脚本:
import os
lines = open('<name_of_your_file>').readlines()
for line in lines:
url, file_name = line.strip().split(' ', 1)
os.system(f'wget {url} -o {file_name}')
如果一个人想要它在一个衬里 bash,下面的作品:
$ python -c "import os; lines = open('<name_of_your_file>').readlines(); [ os.system(f'wget {url} -o {file_name}') for url, file_name in [line.strip().split(' ', 1) for line in lines]]"
您可以使用此代码:
while IFS= read -r line; do
IFS=' '
read -a strarr <<< "$line"
wget -O ${strarr[1]} ${strarr[0]}
done < filename.txt
这是一个 bash 脚本。但如果你不知道如何使用它:
- 将其粘贴到 file.sh
- 运行这条命令才能执行:
chmod +x file.sh
- 执行:
./file.sh
P.S 不要忘记更改文件名以使用包含链接的实际文件名。
你可以使用这个 awk|xargs 一行:
awk '{url=; ="";{sub(/ /,"");out=url" -O \""[=10=]"\""}; print out}' file.txt | xargs -L 1 wget
解释:
url= # temp var inside awk
="" # replace url with null space
{sub(/ /,"");out=url" -O \""[=11=]"\""} # need to output var
sub(/ /,"") # need to trim leading white space
out=url" -O \""[=11=]"\"" # line formatting with escaping characters
print out # シ
xargs -L 1 wget # get awk output line by line to wget
plus some awk sintax sugar
示例:
cat << EOF >> file.txt
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz name_of_the_file2
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1j.tar.gz name of_the_file3
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1i.tar.gz name of the_file4
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1h.tar.gz name of the file5
EOF
awk '{url=; ="";{sub(/ /,"");out=url" -O \""[=12=]"\""}; print out}' file.txt | xargs -L 1 wget
ls -1
name_of_the_file2
'name of_the_file3'
'name of the_file4'
'name of the file5'
while IFS= read -r line; do
IFS=' '
read -a strarr <<< "$line"
if [[ ${#strarr[@]} -gt 2 ]]
then
filename=''
for (( i=${#strarr[@]}; i>0; i-- ));
do
filename="${strarr[i]} $filename"
done
wget ${strarr[0]} -O "$filename"
else
wget ${strarr[0]} -O ${strarr[1]}
fi
done < filename.txt
此代码已修改,现在可以创建文件名中包含多个单词的文件。但是这段代码不是很清楚,因为我不知道 bash 脚本的所有功能。我实际上正在使用 python.