tar
em si não pode fazer isso, então você tem que criá-lo a partir de uma lista ordenada corretamente. Em princípio, você poderia então usar a opção tar
do -T
, mas não há como especificar que os nomes de arquivos nessa lista devem ser terminados pelo NUL. Então, se você tem algum nome de arquivo com newlines neles (o que é permitido), isso irá quebrar.
A melhor opção é usar cpio
para gerar os arquivos, pois isso aceita uma lista terminada de NU de nomes de arquivos e pode gerar arquivos tar.
Se o seu comando tar
for:
tar cvf /somedir/all.tar .
Em seguida, para que isso seja classificado pelo nome que você teria que fazer (assumindo o GNU find e o cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Isso tem a desvantagem de os subdiretórios serem colocados entre nomes de arquivos. Você pode fazer truques com find
s -printf0 especificando o diretório e as informações de profundidade e classificação com sort -n
, mas isso também influencia como os arquivos com números são classificados em um diretório.
Se o acima não for satisfatório você provavelmente poderia usar um pequeno programa python baseado em os.walk()
para gerar a ordenação desejada com controle total (profundidade primeiro, baseada na extensão etc), mas se você seguir essa rota você pode bem, solte cpio
e escreva o arquivo tar
com o módulo tarfile
do python.