我對 shell 腳本還很陌生,所以我確信這個指令是錯的。我正在嘗試將文件資料夾重命名為 txt 文件中的名稱。前提是 filenames.txt 和資料夾中的檔案已經組織好,使第一行與系統中的第一個檔案相符。我得到的是:
while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt
但沒有成功。你們能幫我改正嗎?
謝謝
答案1
如果您沒有重命名文件的演算法規則(即您實際上需要一個文件作為輸入),我建議
從要重新命名的文件清單中建立一個 txt 文件,例如:
尋找 。 -名稱“*.mkv”> 文件.txt
編輯此檔案並在每一行中的舊名稱後面新增名稱,例如
./myfirst.mkv ./mynewfirst.mkv
處理這個檔案:
讀取行時;執行 eval mv $line;完成 < 文件.txt
答案2
我從這裡得到靈感:https://unix.stackexchange.com/a/26604
聽起來您需要同時循環檔案和目錄中的檔案:
DIR=./thefiledir
while : ; do
read -r oldfile <&3
read -r newfile <&4
if [ -z "$oldfile" -o -z "$newfile" ]; then
break
fi
mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt
我不知道文件中是否有目錄名,因此您可能需要在該行之前filenames.txt
添加 來測試這是否會執行您想要的操作。echo
mv
另外,我可能會嘗試以另一種方式執行此操作...我不確定您如何使用新名稱生成文件,但正如另一個答案所暗示的那樣,您可以循環遍歷舊名稱和新名稱的文件,或者只是讀取名稱並應用一些邏輯來創建新名稱。