Rename

訪問 .txt 文件中的每一行,下載和重命名連結

  • July 4, 2016

假設我有一個 .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

要執行,輸入bashsh類似這樣:

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()函式)進行額外處理。print例如

gsub(/'\''/,"'"'\\\\''"'",$2);

單引號、雙引號、斜杠和反斜杠幾乎無法閱讀的混亂'將第二個欄位中的所有 s 轉換為'\''. 引用有時可能是一種真正的痛苦(儘管它在腳本中不會那麼難看,#!/usr/bin/awk -f而不是單引號單行)。

  1. 或者,如果$2是 URL,則可能值得將單引號更改為%27,它是撇號的 URL 實體編碼。shell 不關心 % 符號,如果它們在單引號內,當然不關心,但它非常關心引號。

同樣,您可能希望在提取 .extension 時排除所有標點符號。例如

ext=gensub(/.*(\.[^[:punct:]]*)/,"\\1",1); 

但請注意,這可能會變得相當複雜,具體取決於圖像文件名的確切位置和嵌入方式,例如 URL。

引用自:https://unix.stackexchange.com/questions/293806