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

时间:2018-03-15 01:02:14

标签: linux bash shell loops wget

#!/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"。我知道你用 - (大写O承认)重命名一个wget

wget-O $i > foo.tag

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

nameone
nametwo
namethree
name spaced
namefour
name spaced2

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

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

  

- waitretry = 1

它认为它是第一个完整的WGET TAG ??

实验上我猜这可以用数组完成吗?但随后出现的问题是,这将是一个巨大的阵列,我必须添加单独的代码来添加引号和括号等等。更不用说行情必须不会导致这一点(例如:"名称""间隔")。

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)

调试代码

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。正如我评论的那样,您确实可以使用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

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

$ unset IFS