gpt4 book ai didi

linux - 如何将 wget 输出重命名为文件中的名称(bash)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:46 26 4
gpt4 key购买 nike

#!/bin/bash

for i in `cat pdfs.txt`
do

wget --waitretry=1 --read-timeout=20 --timeout=15 -c -O $i > `cat pdfsnaming.txt`

done

我正在使用 wget 抓取 pdf 文档列表,我想将它们重命名为文本文档“pdfsnaming.txt”的内容。我知道你重命名了一个 wget -(大写 O 承认)

wget-O $i > foo.tag

pdfsnaming.txt-里面有大约500个名字,有些有空格,有些没有; -没有报价(例如:JohnDoe)例如:John Doe)

nameone
nametwo
namethree
name spaced
namefour
name spaced2

pdfs.txt- 包含 urls fyi,没有引号

错误结果/下载的文件名--

--waitretry=1

它将其命名为第一个完整的 WGET 标签??

根据实验,我想这可以用数组来完成吗?但随之而来的问题是,这将是一个巨大的数组,我必须添加单独的代码来添加引号和括号等。更不用说引号不会导致这个(例如:“name”“spaced” ).

while read -a arr;
do wget --waitretry=1 --read-timeout=20 --timeout=15 -t 1 -cO
"${arr[0]}".pdf "${arr[1]}"
done < <(paste -d'\1' pdfsnaming.txt pdfs.txt)

调试代码

最佳答案

这是一个有趣的问题。正如我评论的那样,您确实可以使用 paste 来处理它。

$ cat pdfs
a
b
c
d
$ cat names
aa
b b
cccc
d d d d

paste 为您提供压缩输出:

$  paste -d'\1' pdfs names
aaa
bb b
ccccc
dd d d d

-d 表示分隔符,选择 '\1' 作为分隔符是因为它不可打印,因此您不太可能会遇到此应用程序的问题。

接下来就是例行公事了:

$ IFS='\1'
$ while read -a arr; do echo pdf is "${arr[0]}", name is "${arr[1]}"; done < <(paste -d'\1' pdfs names)
pdf is a, name is aa
pdf is b, name is b b
pdf is c, name is cccc
pdf is d, name is d d d d

您需要设置IFSread 知道您自定义的分隔符。您可以通过取消设置来恢复。

$ unset IFS

关于linux - 如何将 wget 输出重命名为文件中的名称(bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49289985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com