Je veux créer un fichier tar où tous les répertoires et fichiers sont traités par ordre alphabétique. C'est pour toute la hiérarchie des répertoires qui est en cours d'élaboration, donc cela commencerait par traiter le premier répertoire par ordre alphabétique, puis les sous-répertoires par ordre alphabétique, etc. J'ai parcouru la page de manuel et je ne trouve pas de commutateur pour cela.
J'admets, c'est moitié nouveauté, moitié légère optimisation. Je ne peux tout simplement pas croire qu'il n'y a pas de moyen facile de le faire. J'ai dû louper quelque chose.
Réponses:
Slartibartfast est sur la bonne voie, mais le comportement par défaut de tar est de descendre dans les répertoires, vous pouvez donc obtenir plus d'une copie du même fichier inclus dans le fichier tar généré. Vous pouvez vérifier en faisant
tar tf file.tar | sort
La solution de contournement consiste à inclure l'option --no-recursion à tar. En outre, vous devriez être en mesure d'envoyer des noms de fichiers étranges en utilisant l'-print0
option de recherche, puis en utilisant l'--null
option de tar. Le résultat final ressemble à ceci:find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -
Vous pouvez vérifier l'ordre dans le fichier tar en utilisant
tar tsf tarfile.tar
. Bien que vous n'ayez probablement jamais besoin des options -print0, -z et --null sauf si vous savez que vous allez rencontrer un nom de fichier avec une nouvelle ligne incorporée, je ne l'ai jamais essayé.la source
L'ordre des fichiers dans le fichier tar n'a pas vraiment d'importance, car lorsque les fichiers sont extraits, le système de fichiers ne conservera pas l'ordre de toute façon.
Il n'y a pas de commutateur pour cela, mais si vous le vouliez vraiment, vous pourriez fournir à tar une liste de noms de fichiers dans l'ordre trié, et cela créerait le fichier tar avec l'ordre que vous lui donnez.
la source
tar tf tarfile | sort
En supposant que vous n'ayez aucun fichier avec des retours à la ligne dans les noms:
Si cela ne fonctionne pas (jamais essayé, donc je ne sais pas - signifie stdin pour l'argument -T):
Il y a ensuite la question de savoir pourquoi. Mais parfois, il est plus facile de ne pas demander.
la source
Pax est en quelque sorte le successeur POSIX de cpio et tar et le type de fusibles les meilleurs aspects des deux. Il écrit les archives tar (ustar) par défaut. Il effectue également la répartition et l'invite automatiques des supports et imprime un résumé une fois terminé.
la source
Comme alternative à la réponse de @ CharlieHerron, si vous souhaitez uniquement conserver le contenu (fichiers, lien symbolique) et les métadonnées de dossier (par exemple, autorisation de dossier, mtime, etc.), vous souhaiterez peut-être filtrer les dossiers de
find
la sortie de.la source