Se você é tar
um diretório recursivamente, ele usa apenas a ordem dos SOs readdir
.
Mas, em alguns casos, é bom classificar os arquivos classificados.
Qual é uma boa maneira de tar um diretório classificado em ordem alfabética?
Observe que, para os fins desta pergunta, o gnu-tar em um sistema Linux típico é bom.
Respostas:
Para um GNU
tar
:Você provavelmente também vai querer olhar
--preserve-order
.fonte
--sort
foi introduzido na versão 1.28 do tar.--preserve-order
não é relevante para esta questão.tar: Exiting with failure status due to previous errors
erro. @mhsmithCom
zsh
, em vez de:Usar:
Você pode fazer o mesmo com versões recentes de
bash -O globstar -O dotglob
with:Ou versões recentes de
FIGNORE='@(.|..)' ksh93 -o globstar
with:pax
é o comando padrão para criartar
arquivos. A saída vai para stdout. Os globs do shell são classificados por nome.Se você encontrar um erro muito longo da lista Arg , poderá mudar para:
( embora nem todas as
pax
implementações sejam compatíveis-0
).fonte
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 usartar
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:Então, para que isso seja classificado por nome, você teria que fazer (assumindo que GNU find e cpio):
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 soltarcpio
e escrever otar
arquivo com otarfile
módulo python .fonte