按名称顺序排列目录下的文件列表

按名称顺序排列目录下的文件列表

我想要按名称顺序列出目录下的文件列表,以便传递给图像查看器。

我正在使用find $PHOTODIR -iname "*.jpg"。不幸的是,这会导致图像乱序。

在 USB 密钥(格式化为 FAT32)上,我可以理解文件是按照目录条目的顺序处理的,因此我复制到了 Ext4 驱动器,我认为这会按名称顺序生成文件,但仍然存在问题;我猜它们是按 inode 顺序排列的。

ls按顺序列出,但我需要相对路径。

有人能建议一个合适的脚本吗?

答案1

如果“名称顺序”是指简单的字母顺序排序,那么您只需查看结果即可sortfind只要文件名称中不包含换行符,就可以正常工作:

find "$PHOTODIR" -iname "*.jpg" | sort

如果要将它们作为参数传递给图像查看器(或任何其他命令),则需要将它们通过管道传输到xargs。只要文件名或路径中没有空格,这种方法就可以立即使用。

如果您希望它适用于任何文件名或路径,请使用-print0参数使find的输出由 NUL 字符分隔,使用 进行排序-z,然后使用xargs -0

find "$PHOTODIR" -iname "*.jpg" -print0 | sort -z | xargs -0 <command>

相关内容