2013-05-15 59 views
0

我一直在尋找如何在unix文件名中使用{}功能。例如,我有一個名爲ID#的子目錄。每個子目錄都有一個錄製的音頻文件,被命名爲特定的測試問題ID#。下面的命令:unix命令中的大括號的用法是什麼?

for file in */1-01*; do echo "$file"; done

將列出當前目錄下的每個子目錄中的音頻文件的名稱。這樣做給了我一個清單:

809043250/1-01-20131.wav 
813777079/1-01-20131.wav 
817786199/1-01-20131.wav 
827832538/1-01-20131.wav 
834820477/1-01-20131.wav 

我想每個上述.wav文件的重命名爲不同的編號,所以它最終應該是這樣的:

809043250/5001.wav 
813777079/5001.wav 
817786199/5001.wav 
827832538/5001.wav 
834820477/5001.wav 

所以,我該怎麼辦如果我想使用mv命令來保留此人的ID#(809043250,813777079等)和第一個/但使用${file/firstOccurance/replaceWith}表示法,但剝去1-01-20131.wav並粘上5001.wav

我不知道如何在谷歌搜索這個。它被稱爲正則表達式(我不這麼認爲......)? Brace符號?文件名模式?有誰知道這些的一個很好的解釋?

謝謝!

回答

1

bash中,符號上的一個變體稱爲Brace Expansion。這會生成文件名稱。

符號上的其他變體稱爲Shell Parameter Expansion。這裏,bash提供了正則表達式替換符號${var/match/replace}

你的目的,你需要的paremeter擴展:

$ x="809043250/1-01-20131.wav 
> 813777079/1-01-20131.wav 
> 817786199/1-01-20131.wav 
> 827832538/1-01-20131.wav 
> 834820477/1-01-20131.wav" 
$ for file in $x; do echo $file ${file/1-01-20131/5001}; done 
809043250/1-01-20131.wav 809043250/5001.wav 
813777079/1-01-20131.wav 813777079/5001.wav 
817786199/1-01-20131.wav 817786199/5001.wav 
827832538/1-01-20131.wav 827832538/5001.wav 
834820477/1-01-20131.wav 834820477/5001.wav 
$ 
+0

謝謝你!如果谷歌是一張地圖,不知道搜索關鍵是非常令人沮喪!幸運的是,人類可以將不正確的鍵轉換成正確的鍵並返回值! – ejsuncy

相關問題