我想要按名称顺序列出目录下的文件列表,以便传递给图像查看器。
我正在使用find $PHOTODIR -iname "*.jpg"
。不幸的是,这会导致图像乱序。
在 USB 密钥(格式化为 FAT32)上,我可以理解文件是按照目录条目的顺序处理的,因此我复制到了 Ext4 驱动器,我认为这会按名称顺序生成文件,但仍然存在问题;我猜它们是按 inode 顺序排列的。
ls
按顺序列出,但我需要相对路径。
有人能建议一个合适的脚本吗?
答案1
如果“名称顺序”是指简单的字母顺序排序,那么您只需查看结果即可sort
,find
只要文件名称中不包含换行符,就可以正常工作:
find "$PHOTODIR" -iname "*.jpg" | sort
如果要将它们作为参数传递给图像查看器(或任何其他命令),则需要将它们通过管道传输到xargs
。只要文件名或路径中没有空格,这种方法就可以立即使用。
如果您希望它适用于任何文件名或路径,请使用-print0
参数使find
的输出由 NUL 字符分隔,使用 进行排序-z
,然后使用xargs -0
:
find "$PHOTODIR" -iname "*.jpg" -print0 | sort -z | xargs -0 <command>