Bash - 按文件名的第一个字母排序

时间:2012-06-25 21:23:39

标签: bash sorting

我正在尝试为mplayer编写一个命令,它将按顺序播放目录中的所有音乐文件。

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

如果我已经在我正在播放音乐的目录中,这可以正常工作。事实上,如果我在一个目录中,它甚至可以工作,例如我输入'mplay MusicFileDirectory'。

但是,当我不在我播放的目录中且文件编号为1,2,3 ... 10,11等(而不是01,02 ... 11)时,命令会中断 - 10 ,现在在第二个文件之前播放了11个文件。

这是因为sort正在应用于扩展文件路径,即MusicFileDirectory / 1,因此它不会按数字排序。

我如何获得sort命令只对文件路径的最后部分进行排序,因此我可以输入'mplay / home / james / Music / MusicFileDirectory'作为示例,它只使用目录中文件的名称对播放列表进行排序?

2 个答案:

答案 0 :(得分:2)

我不是100%确定它会起作用,但是尝试排序-V。

编辑:正如jordanm所说,这显然是一个新的GNU扩展。

答案 1 :(得分:0)

Sort具有指定字段分隔符(-t)和位置(-k)的选项。就像是: sort -n -t/ -k2

也就是说,如果你想在任何目录中使用通用解决方案,恐怕单线程别名太难(而且复杂)。你最好使用一个小脚本,首先计算路径中的“/”数(比如说x),然后做sort -n -t/ -k$((x+1))