如何根据文件的索引号对目录中的文件进行排序?

如何根据文件的索引号对目录中的文件进行排序?

我有这样的文件:

4-some file.mp4
1-another file.mp4
3-one more file.mp4
2-got another file.mp4

等等。

使用命令行播放 vlc 中的文件,使用vlc *按未排序的顺序播放它们。

所以我尝试使用vlc“”播放文件vlc < <(ls * | sort -V)不起作用。

尝试使用更改文件的时间戳 for i in "$(ls [!R]* | sort -V)"; do touch "$i";sleep 1; done不起作用,因为"$(ls [!R]* | sort -V)"将完整的文件列表作为一个参数表示,但我无法删除双引号,因为文件名称中包含空格。

答案1

这应该有效

find . -name "*mp4" -print0 | sort -Vz | xargs -0 vlc

答案2

GNU ls 也有-v natural sort of (version) numbers within text,比如sort -V.

文件名中的空格可以通过删除 , 中的空格来处理$IFS(假设文件名中没有换行符):

$ IFS=$'\n' 
$ for x in $(ls -v) ; do echo "> $x" ; done
> 1-aa aa
> 2-cc cc
> 10-bb bb
> 21-dd dd
$ vlc $(ls -v)

(如果您以交互方式执行此操作,IFS之后将保持修改状态。)

有关 的更多信息IFS,请参阅David Wheeler 关于文件名中特殊字符的著作

相关内容