tarСам не может этого сделать, поэтому вы должны создать его из правильно упорядоченного списка. В принципе, вы можете использовать параметр tar's' -T, но нет никакого способа указать, что имена файлов в этом списке должны заканчиваться NUL. Так что если у вас есть какие-либо имена файлов с символами новой строки в них (что разрешено), это просто сломается.
Лучшим вариантом является использование cpioдля генерации файлов, так как он принимает завершенный по NUL список имен файлов и может генерировать tar-файлы.
Если ваша tarкоманда будет:
tar cvf /somedir/all.tar .
Затем для того, чтобы это было отсортировано по имени, вам нужно было бы сделать (предполагая, что GNU find и cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Это имеет тот недостаток, что подкаталоги размещаются между именами файлов. Вы можете проделать трюки с finds -printf0, указав каталог и информацию о глубине, а также отсортировав их, sort -nно это также влияет на порядок сортировки файлов с номерами в каталоге.
Если вышесказанное неудовлетворительно, вы, вероятно, могли бы использовать небольшую программу на основе Python os.walk()для генерации требуемого порядка с полным контролем (сначала глубина, основанная на расширении и т. Д.), Но если вы пойдете по этому пути, вы можете также отбросить cpioи выписать tarфайл с tarfileмодулем Python .