2015-04-03 21 views
0

如何使用find查找特定類型的所有文件'*.mp3'但具體而言,包含關鍵字的任何名稱的所有文件。例如'black'Bash/Shell腳本查找包含關鍵字和特定文件類型的所有文件

所有這些文件將適用:

- blackDog.mp3 
    - black dog.mp3 
    - black rain.mp3 
    - blackness.mp3 
    - BlAcK.mp3 
    - black.dog.mp3 
    - black-dog.mp3 

這裏是我的代碼,會發現所有'*.mp3'文件,但我只是找不到寫所有的MP3與任何名稱包含關鍵字的方式'black'

find ~/Desktop \(-type f -iname '*.mp3' \) -print0 | 
while IFS= read -r -d '' f; 
do mv -- "$f" ~/Music ; 
done 

非常感謝你對你能夠給我和請在下面評論的任何澄清任何幫助:

+3

'-iname'* black * .mp3''不適合你? – Barmar 2015-04-03 04:07:18

+0

@Barmar現在我知道了,非常感謝你 – joshuatvernon 2015-04-03 07:10:55

+0

所有這些文件都在同一個目錄中嗎?如果是這樣,最好的方法是簡單地'mv * black * .mp3〜/ Music' – 2015-04-03 09:15:56

回答

2

這應做到:

find ~/Desktop -type f -iname '*black*.mp3' -exec mv -- {} ~/Music \; 

的文件名模式*black*.mp3比賽任何包含black並以.mp3結尾的文件名。

+0

在shell中使用'-exec'而不是循環的好建議。也許最好使用'exec +'而不是'exec \;'來減少'mv'的調用次數。 – 2015-04-03 09:18:34

+0

@TomFenech文檔說'+'在最後附加了所有的文件名。但對於'mv',最後需要目標目錄。 GNU'mv'具有'--target-directory',可以在文件名之前使用它來解決這個問題,但我認爲最好保持它的通用性。除非你移動數百個文件,否則差異可能可以忽略不計。 – Barmar 2015-04-03 17:04:57

相關問題