2012-06-25 61 views
0

我正在嘗試爲mplayer編寫一個命令,它將按順序播放目錄中的所有音樂文件。Bash - 按文件名的第一個字母排序

alias mplay='mplayer -playlist <(find "$PWD" -type f|sort -n)' 

這工作正常,如果我已經在我正在播放音樂的目錄。事實上,如果我在目錄中,並且例如鍵入「mplay MusicFileDirectory」,它甚至可以工作。

但是,當我不在我玩的目錄中時,命令會中斷,文件編號爲1,2,3 ...... 10,11等(而不是01,02 ... 11) - 10,11個文件現在在第二個文件之前播放。

這是因爲排序正在應用於擴展文件路徑,即MusicFileDirectory/1,因此它不會進行數字排序。

如何獲得排序命令只排序文件路徑的最後部分,因此我可以鍵入'mplay/home/james/Music/MusicFileDirectory',例如它只使用文件名目錄來排序播放列表?

回答

2

我不是100%確定它會工作,但給排序-V一試。

編輯:正如jordanm指出的,這是一個更新的GNU擴展。

+0

你應該注意到,這是一個較新的GNU擴展。這個問題沒有被標記爲Linux。 – jordanm

+0

謝謝,它適用於我。良好的延伸,從未聽說過它。據推測BSD解決方案會更困難。 –

0

排序有指定字段分隔符(-t)和位置(-k)的選項。例如: sort -n -t/ -k2。這就是說,如果你想要一個通用的解決方案從任何目錄工作,恐怕一個單線程的別名將是太困難(和複雜)。你是一個微小的腳本,在那裏你會先算的數目最好在路徑「/」(比如x),然後做sort -n -t/ -k$((x+1))

相關問題