Si vous tar
un répertoire récursivement, il utilise simplement l'ordre des os readdir
.
Mais dans certains cas, il est agréable de tarer les fichiers triés.
Quelle est la bonne façon de tarer un répertoire trié par ordre alphabétique?
Notez, pour les besoins de cette question, gnu-tar sur un système Linux typique est très bien.
Réponses:
Pour un GNU
tar
:Vous voudrez probablement aussi regarder
--preserve-order
.la source
--sort
a été introduit dans tar version 1.28.--preserve-order
n'est pas pertinent pour cette question.tar: Exiting with failure status due to previous errors
erreurs. @mhsmithAvec
zsh
, au lieu de:Utilisation:
Vous pouvez faire de même avec les versions récentes de
bash -O globstar -O dotglob
avec:Ou des versions récentes de
FIGNORE='@(.|..)' ksh93 -o globstar
avec:pax
est la commande standard pour créer destar
fichiers. La sortie passe à stdout. Les globes shell sont triés par nom.Si vous rencontrez une erreur de liste Arg trop longue , vous pouvez passer à:
(toutes les
pax
implémentations ne sont cependant pas prises en charge-0
).la source
tar
lui-même ne peut pas le faire, vous devez donc le créer à partir d'une liste correctement ordonnée. En principe, vous pouvez alors utilisertar
l'-T
option de, mais il n'y a aucun moyen de spécifier que les noms de fichiers de cette liste doivent se terminer par NUL. Donc, si vous avez des noms de fichiers contenant des retours à la ligne (ce qui est autorisé), cela se cassera.Une meilleure option consiste à utiliser
cpio
pour générer les fichiers car elle accepte une liste de noms de fichiers terminée par NUL et peut générer des fichiers tar.Si votre
tar
commande serait:Ensuite, pour que cela soit trié par nom, vous devez faire (en supposant que GNU find et cpio):
Cela présente cependant l'inconvénient que les sous-répertoires sont placés entre les noms de fichiers. Vous pouvez effectuer des astuces avec
find
s -printf0 en spécifiant le répertoire et les informations détaillées et le tri avecsort -n
mais cela influence également la façon dont les fichiers avec des numéros sont triés dans un répertoire.Si ce qui précède n'est pas satisfaisant, vous pourriez probablement utiliser un petit programme python basé sur
os.walk()
pour générer l'ordre que vous souhaitez avec un contrôle total (profondeur d'abord, basé sur l'extension, etc.), mais si vous suivez cette voie, vous pouvez aussi bien laisser tombercpio
et écrire letar
fichier avec letarfile
module de python .la source