2011-07-11 52 views
5

我有類似下面的列表,在一個名爲lista.txt文件:重命名文件與名稱的列表從另一個列表中

mickey 
donald 
daffy 
bugs 

我有一個包含很多文件的文件夾:文件名1,文件名.. 。文件名N。

我想通過這些文件進行迭代來實現:

filename1 => mickey 
filename2 => donald ... 

你能爲我提供工作的示例代碼完成這個任務?

+1

您是否有任何條件將文件夾中的文件映射到字符串?我這樣問是因爲:如果你用'ls'來獲取文件,你會按照字母順序排序,但最終你可以有不同的映射'filename_X => string_Y' –

回答

6

這不是我的風格,爲你做你的工作。我寧願你發佈你已經試過的東西,所以我可以幫你調試它,但這個問題很簡單,反正我會咬它。

x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done 
+0

對不起,我在我的問題中犯了一個可怕的錯誤。真正的文件名不是編號,而是隨便的。不是f1,f2 ... fn。但f_a,f_pippo,f123等......我如何與這兩個列表進行交互? –

1
let "count=1" 

for newname in $(cat lista.txt); do 
    mv "filename$count" "$newname" 
    let "count++" 
done 
3

使用bash數組:

files=(*) 
i=0 
while read -r new_name; do 
    mv "${files[$i]}" "$new_name" 
    ((i++)) 
done < lista.txt 
1

我用雙重定向新的文件描述符根據給定的「Filelist.txt中」這種方式重命名一個目錄下的所有FLAC文件:

while read -u 9 filename ; do 
    read -u 8 newname 
    echo mv "$filename" "$newname" 
done 9<<<"$(ls -1 *flac)" 8< filelist.txt 

目錄上的每個.flac文件名在文件描述符9中通過文件描述符9傳遞給變量「filename」迭代,filelist.txt的每一行都通過文件描述符8到變量「newname」。

是的,其中一個新的文件描述符可以避免,只需使用默認的標準輸入(刪除「-u 9」和「9」),但我習慣於不使用stdin;這樣你可以在循環內部包含一個讀取語句來進行交互或控制,並且它不會被重定向的數據填充。

回聲是「僅測試」,應在批准操作後刪除。