擁有資料和*.tsv
描述資料的文件。想要使用描述並相應地重命名資料。
請看一看 :
awk
過濾 tsv 的命令如下:common_voice_en_22090684.mp3 four common_voice_en_22090691.mp3 no common_voice_en_22090696.mp3 one
瀏覽以下目錄
*.mp3
:for i in *.mp3 ; do echo $i
mv
是重命名檔案的命令,它需要兩個參數(要更改的檔案以及更改內容)
如何使用awk
(讀取和使用描述)和mv
(使用傳遞的描述重命名現有文件?因此,請查看上面的範例,結果將是:
four.mp3
no.mp3
one.mp3
使用建議的命令並不重要。任何關於如何做到這一點的想法、建議都是非常受歡迎的!
答案1
這不滿足您的要求,但如果您希望處理許多文件,則透過使用 .tsv 作為驅動程式而不是 shell 擴充功能可能會獲得更好的效能,因為您不會為每個 mp3 打開一次 tsv。echo
如果它看起來能達到您的預期,請將其刪除。
$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv
答案2
IIUC,在儲存輸出後你想要這樣的東西awk 指令過濾 tsv在文件中:
#!/usr/bin/env sh
for i in *.mp3
do
new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
if [ -n "$new_name" ]
then
echo mv -- "$i" "$new_name"
fi
done
刪除echo
以實際執行重命名,但首先運行它以確保它符合您的需求。另請注意,失敗的可能性很小,mv
因為當腳本執行到達該行時原始文件將已經被刪除 - 您可以set -e
在第一次mv
失敗後立即退出。