我試過尋找類似的問題,但找不到任何東西,所以如果之前曾問過這個或類似的道歉。OSX Bash:動態地重命名從列表中找到的文件
我正在寫一個腳本來讀取帶有參考號碼的文件名的文本列表,然後查看這些文件的子文件夾,然後修改名稱以包含參考號。
文本文件看起來像這樣(製表符分隔,並用頭):
"File Name (without Extension)" "Media Number"
"AK7A7964" "01017134"
"IMG_0026" "01017192"
"106491 Anenome" "01017206"
"CW1_9449" "01017243"
我使用這種清潔的\ t文件和「:
cat $file | sed "1 d" | tr "\\t" "," | sed 's/\"//g' > $cleanfile
然後閱讀cleanfile轉換爲while循環:
INPUT=$cleanfile
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read fname media; do
並構造新的名稱以修改爲開始的fi lename
newFileName="MA_${media}_"
我然後使用做了找到具有該名稱的每個文件:
for found in $(find . -type f -name "$fname.*"); do
但是當我嘗試修改名字,它只有在有多個文件改變最後的結果與找到的同名。
我可能錯過了使用sed
這樣做的一個竅門,但是我找不到一個指南,它不會很快在深層次發展!
[編輯添加]
我在做什麼,最後do
是在此之後: 獲取路徑和基本名稱,創建新的文件名,然後使用mv
來取代它。我其實只是在做一個echo
所以它是無損
foundPath="${found%/*}"
foundFile="${found##*/}"
newFile=$newFileName$foundFile
newFilePath="${foundPath}/${newFile}"
mv $found $newFilePath
如果有任何文件名中出現了多次(如會有),那也只是mv
「荷蘭國際集團是最後一個。
,如果你提供你在你的循環do'後'做什麼,這將是有幫助的。 –
如果名稱中有空格,循環將不起作用,如'106491 Anenome'。 – Barmar
''read''循環如何使用','作爲'fname'和'media'之間的分隔符? – Barmar