我有一组这样的文件名
vorlesung 02.11.15.mp4
vorlesung 04.01.16.mp4
vorlesung 07.12.15.mp4
vorlesung 09.11.15.mp4
vorlesung 09.12.15.mp4
...
文件名的最后一部分是欧洲格式的日期。现在我尝试按照日期对它们进行排序sort
(因为awk
对于这个来说,这似乎有点过头了)。从这个答案我得出结论,这样的事情应该有效。
ls *.mp4 | sort -k 2.7,2.8 -k 2.4,2.5 -k 2.1,2.3
但实际上,2.1,2.3
似乎只有该键起作用。当我单独应用其他键时,什么也没有发生。该numeric-sort
标志没有帮助。这里的正确语法是什么?
答案1
嗯... awk 不一定非要在这里抛弃。我们可以用它在文件名前面加上我们想要排序的表达式,排序完成后,只需忽略前缀即可。
$ cat lst
vorlesung 02.11.15.mp4
vorlesung 04.01.16.mp4
vorlesung 07.12.15.mp4
vorlesung 09.11.15.mp4
vorlesung 09.12.15.mp4
$ awk -F'[ .]' '{print $4 $2 $3, $0}' lst | sort | sed -e 's/^[0-9]* //'
vorlesung 02.11.15.mp4
vorlesung 07.12.15.mp4
vorlesung 09.11.15.mp4
vorlesung 09.12.15.mp4
vorlesung 04.01.16.mp4
答案2
使用-t ' '
标志指定分隔符也会给您所需的结果:
user@linux:~$ ls *.mp4 | sort -t ' ' -k 2.7,2.8 -k 2.4,2.5 -k 2.1,2.3
vorlesung 02.11.15.mp4
vorlesung 07.12.15.mp4
vorlesung 09.11.15.mp4
vorlesung 09.12.15.mp4
vorlesung 04.01.16.mp4
实际上,我也有点惊讶为什么添加-t ' '
标志会产生影响,因为根据这个问题一个或多个空格应作为默认分隔符。