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
Это имеет тот недостаток, что подкаталоги размещаются между именами файлов. Вы можете проделать трюки с find
s -printf0, указав каталог и информацию о глубине, а также отсортировав их, sort -n
но это также влияет на порядок сортировки файлов с номерами в каталоге.
Если вышесказанное неудовлетворительно, вы, вероятно, могли бы использовать небольшую программу на основе Python os.walk()
для генерации требуемого порядка с полным контролем (сначала глубина, основанная на расширении и т. Д.), Но если вы пойдете по этому пути, вы можете также отбросить cpio
и выписать tar
файл с tarfile
модулем Python .