Mil*_*ays 6 linux command-line sorting
我想要一个目录下的文件列表,按名称顺序传递给图像查看器。
我正在使用find $PHOTODIR -iname "*.jpg". 不幸的是,这会产生乱序的图像。
在U盘上(格式化为FAT32)我可以理解文件是按照目录条目的顺序处理的,所以我复制到了一个Ext4驱动器,我认为它会按名称顺序生成文件,但仍然存在问题;我猜它们是按 inode 顺序排列的。
ls 按顺序列出,但我需要相对路径。
谁能建议一个合适的脚本?
如果“名称顺序”是指简单的字母排序,那么您可以只sort计算find结果,只要文件的名称中不包含换行符,就可以正常工作:
find "$PHOTODIR" -iname "*.jpg" | sort
Run Code Online (Sandbox Code Playgroud)
如果要将这些作为参数传递给图像查看器或任何其他命令,则需要将它们通过管道传输到xargs. 只要文件名或路径中没有空格,这就是开箱即用的。
如果您希望它与任何文件名或路径一起使用,请使用-print0参数 makefind的输出由 NUL 字符分隔-z,使用排序,然后使用xargs -0:
find "$PHOTODIR" -iname "*.jpg" -print0 | sort -z | xargs -0 <command>
Run Code Online (Sandbox Code Playgroud)