tar
ele próprio não pode fazer isso, então você deve criá-lo a partir de uma lista ordenada corretamente. Em princípio, você poderia usar tar
a -T
opção de, mas não há como especificar que os nomes de arquivos nessa lista sejam NUL terminados. Portanto, se você tiver algum nome de arquivo com novas linhas (o que é permitido), isso será interrompido.
Uma opção melhor é usar cpio
para gerar os arquivos, pois isso aceita uma lista de nomes de arquivos terminada em NUL e pode gerar arquivos tar.
Se seu tar
comando seria:
tar cvf /somedir/all.tar .
Então, para que isso seja classificado por nome, você teria que fazer (assumindo que GNU find e cpio):
find . -type f -print0 | sort -z | \
cpio --create --null --format=ustar -O /somedir/all.tar
Isso tem a desvantagem, embora os subdiretórios sejam colocados entre os nomes de arquivos. Você pode fazer truques com find
s -printf0 especificando o diretório e informações detalhadas e classificando, sort -n
mas isso também influencia a maneira como os arquivos com números são classificados em um diretório.
Se o acima exposto não for satisfatório, você provavelmente poderá usar um pequeno programa python baseado em os.walk()
para gerar a ordem que deseja com controle total (profundidade primeiro, com base na extensão etc.), mas se você seguir esse caminho, poderá também soltar cpio
e escrever o tar
arquivo com o tarfile
módulo python .