2013-10-22 246 views
0

我需要一些幫助完成腳本以將文件夾文件依次重命名爲文件夾名稱。我原以爲這是一種常見的行爲,但我似乎無法找到我在搜索後究竟在尋找什麼。我發現了一些可以按順序重命名文件的工具,但我想將文件夾或目錄名追加到文件的前面。批量重命名文件以包含linux中的文件夾/目錄名稱

#!/bin/bash 
a=1 
for i in *.jpg; do 
    new=$(printf "%04d.jpg" ${a}) #04 pad to length of 4 
    mv ${i} ${new} 
    let a=a+1 
done 

所以我想這些文件夾和文件:

~/tmp/6856u56u56.jpg 
~/tmp/7567787.jpg 

~/tmp2/46u65h5hh.jpg 
~/tmp2/b656hy6hjh.jpg 

的樣子:

~/tmp/UG-tmp-001.jpg 
~/tmp/UG-tmp-002.jpg 

~/tmp2/UG-tmp2-001.jpg 
~/tmp2/UG-tmp2-002.jpg 

~/tmp/(text)-(directory name)-(sequential numbering).(extension) 

運行腳本之後。

任何人都可以幫我嗎?另外,文件不一定是.jpg,文件夾名稱中可能有空格。如果這是一個問題,請讓我知道。這是使用bash腳本的Linux。如果它運行良好,我可能會嘗試將它集成到文件管理器的右鍵單擊中。提前致謝!

回答

0

看預期的結果,此代碼應工作

#!/bin/bash 
a=1 
result=$(printf '%s\n' "${PWD##*/}") 
echo $result 
filename="text-$result-" #replace text with what you need 
for i in *.jpg; do 
    newfilename="$filename$a.jpg" # since the extension is does not change you can hardcode it 
    echo $newfilename 
    mv ${i} ${newfilename} 
    let a=a+1 
done 
+0

我錯過了擴展可以在你的問題改變的一部分,你可以很容易地獲取該文件的擴展名在一個變量並追加它指的http:/ /stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash – girish

+0

謝謝!我收到了一個錯誤,儘管當我嘗試自己弄明白這件事時,那個錯誤讓我感到困惑,但它必須是特定的發行版或其他東西。我在opensuse上,我得到一個「mv:target」blah-12.jpg'不是目錄「錯誤信息。你知道如何解決這個問題嗎?謝謝你的幫助! – user2905513

+0

更新:我找到了一個搜索後,我在腳本之前添加了「IFS =''」,它修復了文件名問題中的空格。我真的希望它在編號時顯示爲零,而不是像0001那樣。我會嘗試自己弄清楚它,但是如果你知道如何解決這個問題並且不介意,我將不勝感激!謝謝! – user2905513

相關問題