2017-07-07 264 views
1

在一個文件夾中,我有600個文件,編號從001到600.它看起來像foo_001.bar。在一個文本文件中,我有這個文件夾的標題&。現在我想用文本文件中相應的001標題foobar重命名foo_001.bar。使用文本文件作爲源重命名文件

但我不知道如何在Linux Mint上正確執行此操作。有人可以幫我或給我一個小費嗎?

titles.txt的內容看起來像這樣。數字和標題之間有一個製表符(可以輕鬆修改)。

001 title of 1 
002 this is 2 
003 and here goes 3 
004 number four 
005 hi this is five 
etc 

該文件夾的內容如下所示。沒有例外。

file_001.ext 
file_002.ext 
file_003.ext 
file_004.ext 
file_005.ext 
etc 
+0

你能告訴我們一些示例文件,你想如何重命名?這將有所幫助 – Inian

+0

你想要這些文件被命名爲「1.ext」的標題,「這是2.ext」等等? – Jack

回答

2

通過與read您的文件只是循環,得到了分離式柱與 awk 相應cut(謝謝你,@Jack)和mv您的文件。在這個非常簡單的實現中,我假定包含新名稱的文本文件位於./filenames,並且您的腳本是從包含文件的目錄中調用的。

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
     NR=$(echo "$line" | cut -f 1) 
     NAME=$(echo "$line" | cut -f 2) 
     if [ -f "foo_${NR}.ext" ] ; then 
       mv "foo_${NR}.ext" "$NAME" 
     fi 
done < filenames 
+1

我知道這只是一種風格的東西,但'cut -f 1'比'awk -F'\ t''{print $ 1}'簡單得多。 – Jack

+0

非常感謝!做了一些小變動,但它工作:-)我想知道爲什麼最後提到的文件名?它必須在那裏,但是爲什麼? – MatthijsG

+0

你需要用一些輸入來提供'read'來實際讀取。這是通過將文件「文件名」的內容傳送到「讀取時」來完成的;做...'循環。 –