6

Я хотел, чтобы список файлов в каталоге в порядке имен передавался в средство просмотра изображений.

Я использую find $PHOTODIR -iname "*.jpg" . К сожалению, это приводит к тому, что изображения не в порядке.

На USB-ключе (в формате FAT32) я мог понять, что файлы обрабатываются в порядке записей каталога, поэтому я скопировал их на диск Ext4, который, как я думал, будет создавать файлы в порядке имен, но проблемы все еще остаются; Я предполагаю, что они в порядке inode.

ls списки в порядке, но мне нужно относительные пути.

Кто-нибудь может предложить подходящий сценарий?

1 ответ1

9

Если под "порядком имен" вы подразумеваете простую сортировку по алфавиту, вы можете просто sort результаты find , что прекрасно работает, если в файлах нет новой строки в их имени:

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

Если вы хотите передать их в качестве аргументов в средство просмотра изображений или любую другую команду, вам нужно передать их в xargs . Это работает из коробки, если в именах файлов или путях нет пробелов.

Если вы хотите, чтобы это работало с любым именем файла или путем, используйте аргумент -print0 чтобы вывод find находился в пределах NUL-символов, сортируйте с -z и используйте xargs -0:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .