列出文件的顺序

列出文件的顺序

如果我有一个目录下的文件列表

ullman-000.pbm
ullman-001.pbm
...
ullman-098.pbm
ullman-099.pbm
ullman-1000.pbm
ullman-1001.pbm
ullman-1002.pbm
ullman-1003.pbm
ullman-1004.pbm
ullman-1005.pbm
ullman-1006.pbm
ullman-1007.pbm
ullman-1008.pbm
ullman-1009.pbm
ullman-100.pbm
ullman-1010.pbm
ullman-1011.pbm
ullman-1012.pbm
ullman-1013.pbm
ullman-1014.pbm
ullman-1015.pbm
ullman-1016.pbm
...

当使用ullman*.pbm引用它们并将其convert ullman*.pbm ullman.pdf作为输入文件传递给命令时,如何按以下顺序制作它们

ullman-000.pbm
ullman-001.pbm
...
ullman-098.pbm
ullman-099.pbm
ullman-100.pbm
...
ullman-999.pbm
ullman-1000.pbm
ullman-1001.pbm
ullman-1002.pbm
ullman-1003.pbm
ullman-1004.pbm
ullman-1005.pbm
ullman-1006.pbm
ullman-1007.pbm
ullman-1008.pbm
ullman-1009.pbm
ullman-1010.pbm
ullman-1011.pbm
ullman-1012.pbm
ullman-1013.pbm
ullman-1014.pbm
ullman-1015.pbm
ullman-1016.pbm
...

谢谢?

答案1

GNUsort可能xargs会成功

printf '%s\0' ullman*.pbm | sort -z -k2,2n -t'-' | xargs -0 convert 

首先通过列出文件而不调用来检查这是否有效convert

printf '%s\0' ullman*.pbm | sort -z -k2,2n -t'-' | xargs -0 printf '%s\n'
ullman-000.pbm
ullman-001.pbm
ullman-098.pbm
ullman-099.pbm
ullman-100.pbm
ullman-1000.pbm
...

然而

printf '%s\0' ullman*.pbm  | xargs -0 printf '%s\n'                                                              
ullman-000.pbm
ullman-001.pbm
ullman-098.pbm
ullman-099.pbm
ullman-1000.pbm
..
..

答案2

一种方法是将具有三位数的文件重命名为四位数,并用零填充。如果你已经安装perl-rename(Ubuntu 上默认安装),你可以尝试:

rename -n 's/-(\d{3}\.)/-0$1/' *.pbm

一旦您对结果感到满意,请在不使用-n.

或者查看其他选项将文件名中的数字填充为固定长度

相关内容