Cette réponse devrait fonctionner dans la plupart des situations. Notez cependant que les noms de fichiers sont stockés dans le fichier tar sous la forme suivante, par exemple, ./file1
plutôt que de se contenter de file1
. J'ai constaté que cela posait des problèmes lorsque l'on utilisait cette méthode pour manipuler des fichiers tarballs utilisés comme fichiers de paquets dans BuildRoot .
Une solution consiste à utiliser des gants Bash pour lister tous les fichiers à l'exception de ..
comme ceci :
tar -C my_dir -zcvf my_dir.tar.gz .[^.]* ..?* *
C'est une astuce que j'ai apprise de cette réponse .
Désormais, tar renverra une erreur s'il n'y a pas de fichiers correspondant aux critères suivants ..?*
o .[^.]*
mais il fonctionnera quand même. Si l'erreur est un problème (vous vérifiez la réussite dans un script), cela fonctionne :
shopt -s nullglob
tar -C my_dir -zcvf my_dir.tar.gz .[^.]* ..?* *
shopt -u nullglob
Bien que nous soyons en train de jouer avec les options de l'interpréteur de commandes, nous pourrions décider qu'il est plus judicieux d'avoir *
correspondre à des fichiers cachés :
shopt -s dotglob
tar -C my_dir -zcvf my_dir.tar.gz *
shopt -u dotglob
Cela peut ne pas fonctionner si les gants de l'interpréteur de commandes *
dans le répertoire courant, alors utilisez alternativement :
shopt -s dotglob
cd my_dir
tar -zcvf ../my_dir.tar.gz *
cd ..
shopt -u dotglob
0 votes
Est-ce que c'est le comportement par défaut de l'action
tar -czf
? Dans mon cas, il ne stocke que les fichiers et non le répertoire. Quand je me contente detar
le répertoire, il l'inclut mais avectar -czf
il ne fait qu'ajouter les fichiers.