#!/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)
调试代码
答案 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