Rename
訪問 .txt 文件中的每一行,下載和重命名連結
假設我有一個 .txt 文件,其中包含要下載的圖像連結列表。例子:
image.jpg image2.jpg image3.jpg
我使用:
cat images.txt | xargs wget
它工作得很好我現在要做的是提供另一個 .txt 文件,格式如下:
some_id1 image.jpg some_id2 image2.jpg some_id3 image3.jpg
我想要做的是拆分 ’ ’ 中的每一行,下載右側的連結,並使用左側提供的 id 更改下載的文件名。
我想以某種方式對每個單獨的行使用 wget image.jpg -O some_id1.jpg。
所以輸出將是:
some_id1.jpg some_id2.jpg some_id3.jpg
有任何想法嗎 ?
這可能會做你的工作,
while read a b do wget "$b" -O "$a".jpg printf "$a".jpg"\n%s" >> newfile done < images.txt
去測試:
$ awk '{ ext=gensub(/.*(\.[^.]*$)/,"\\1",1); print "wget " $2 " -O " $1 ext}' images.txt wget image.jpg -O some_id1.jpg wget image2.jpg -O some_id2.jpg wget image3.jpg -O some_id3.jpg
要執行,輸入
bash
或sh
類似這樣:awk '{ ext=gensub(/.*(\.[^.]*$)/,"\\1",1); print "wget " $2 " -O " $1 ext}' images.txt | bash
如果需要,在列印語句中添加單引號(例如,如果欄位由製表符分隔,並且欄位可能包含空格或其他對 shell 有問題的字元。或者如果欄位 2 是帶有 & 符號
&
、分號;
等的完整 URL)。例如awk '{ ext=gensub(/.*(\.[^.]*$)/,"\\1",1); print "wget '\''" $2 "'\'' -O '\''" $1 ext"'\''"}' images.txt wget 'image.jpg' -O 'some_id1.jpg' wget 'image2.jpg' -O 'some_id2.jpg' wget 'image3.jpg' -O 'some_id3.jpg'
順便說一句,這就是您在單引號字元串中嵌入單引號的方式:(
'\''
結束單引號,反斜杠轉義的單引號,再次開始單引號)額外資訊:
1.如果 $2 可能包含一個或多個撇號,您可能需要在語句之前對
$2
(使用 awk 的gsub()
函式)進行額外處理。gsub(/'\''/,"'"'\\\\''"'",$2);
單引號、雙引號、斜杠和反斜杠幾乎無法閱讀的混亂
'
將第二個欄位中的所有 s 轉換為'\''
. 引用有時可能是一種真正的痛苦(儘管它在腳本中不會那麼難看,#!/usr/bin/awk -f
而不是單引號單行)。
- 或者,如果
$2
是 URL,則可能值得將單引號更改為%27
,它是撇號的 URL 實體編碼。shell 不關心 % 符號,如果它們在單引號內,當然不關心,但它非常關心引號。同樣,您可能希望在提取 .extension 時排除所有標點符號。例如
ext=gensub(/.*(\.[^[:punct:]]*)/,"\\1",1);
但請注意,這可能會變得相當複雜,具體取決於圖像文件名的確切位置和嵌入方式,例如 URL。