OVH Cloud OVH Cloud

Archivage avec tar

10 réponses
Avatar
tealuvikg
Bonjour,

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *

Avec cette commande, les fichiers et sous-répertoires cachés (dont le
nom commence par ".") ne sont pas pris en compte. Si j'utilise la
commande :

tar cvfz archive.tar.gz * .*

Le répertoire parent ("..") est pris en compte !!

Comment faut-il procéder pour archiver un répertoire et tous ses
sous-répertoires (mêmes cachés) ?

Jellyroll.

10 réponses

Avatar
Éric Lévénez
Le 26/11/03 21:23, dans ,
« Jellyroll » a écrit :

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *


tar cvzf ../archive.tar.gz .

"." indique le répertoire courant (avec tous les fichiers y compris les
cachés), et le ../ est là pour que la commande ne se morde pas la queue.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Pascal Bourguignon
Éric Lévénez writes:

Le 26/11/03 21:23, dans ,
« Jellyroll » a écrit :

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *


tar cvzf ../archive.tar.gz .

"." indique le répertoire courant (avec tous les fichiers y compris les
cachés), et le ../ est là pour que la commande ne se morde pas la queue.


Non!!!!!!!

Si on tar ".", il est mis dans l'archive, avec les droits d'accès et
le propriétaire qu'il a, et quand on extrait l'archive, tar change le
propriétaire (si on est root) et change les droits d'accès du
répertoire dans lequel on désarchive!

NE JAMAIS METTRE "." DANS UNE ARCHIVE TAR!


Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :



Le mieux est de ne pas mettre le répertoire courant dans une archive. Faire:

d=$(basename $(pwd))
cd ..
tar zcvf ${d}.tar.gz ${d}


Sinon, si on veut vraiment mettre dans une archive tous les fichiers
et sous-répertoires du répertoire courant, en incluant les dot-files,
on peut sélectionner ces dernier avec: .??*

tar zcvf archive.tar.gz .??* *

(ça sert dans d'autres cas:
mv .??* * ailleurs/
rm -rf .??*
# etc
)

Ceci dit, on loupe les fichiers dont le nom ne comporte qu'un point et
un caractère autre que point. Mais je suis sur que sur tous les
ordinateurs du monde mondial, il n'y a pas plus de 20 fichiers avec un
tel nom. En tout cas, personnellement, je n'en ai jamais vu, et j'ai
alias ls='/bin/ls -FaC' !

--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/


Avatar
Éric Lévénez
Le 27/11/03 7:21, dans , « Pascal
Bourguignon » a écrit :

Éric Lévénez writes:

Le 26/11/03 21:23, dans ,
« Jellyroll » a écrit :

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *


tar cvzf ../archive.tar.gz .

"." indique le répertoire courant (avec tous les fichiers y compris les
cachés), et le ../ est là pour que la commande ne se morde pas la queue.


Non!!!!!!!

Si on tar ".", il est mis dans l'archive, avec les droits d'accès et
le propriétaire qu'il a, et quand on extrait l'archive, tar change le
propriétaire (si on est root) et change les droits d'accès du
répertoire dans lequel on désarchive!

NE JAMAIS METTRE "." DANS UNE ARCHIVE TAR!


Mauvaise règle. Mieux vaut savoir ce que l'on fait que d'interdire. Si
l'archive doit être réinstallée à sa place d'origine l'utilisateur voudra
peut-être retrouver ses droits d'origine. Et quand on restaure une telle
archive avec tous ses fichiers cachés si l'on ne le fait pas dans le
répertoire d'origine, on le fait dans un répertoire fraîchement créé, donc
aucun problème de droit.

Perso je fais toujours :

tar czf dirname.tar.gz dirname

Comme cela, aucun problème avec les noms des fichiers (avec ou sans blanc),
les droits sur les répertoires, la compatibilité entre shell, je ne mets
jamais l'option v pour bien voir les erreurs...

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :



Le mieux est de ne pas mettre le répertoire courant dans une archive. Faire:

d=$(basename $(pwd))
cd ..
tar zcvf ${d}.tar.gz ${d}


Comme d'habitude, ne marche pas si l'on a des espaces dans les noms de
fichiers, et cela peut entraîner des pertes de données par écrasement. Sans
parler du fait que cela ne marche pas avec tous les shells.

Sinon, si on veut vraiment mettre dans une archive tous les fichiers
et sous-répertoires du répertoire courant, en incluant les dot-files,
on peut sélectionner ces dernier avec: .??*

tar zcvf archive.tar.gz .??* *


Ne marche pas partout et est spécifique à certains shells.

(ça sert dans d'autres cas:
mv .??* * ailleurs/
rm -rf .??*
# etc
)

Ceci dit, on loupe les fichiers dont le nom ne comporte qu'un point et
un caractère autre que point. Mais je suis sur que sur tous les
ordinateurs du monde mondial, il n'y a pas plus de 20 fichiers avec un
tel nom. En tout cas, personnellement, je n'en ai jamais vu, et j'ai
alias ls='/bin/ls -FaC' !


Comme apparemment tu n'as jamais vu de blancs dans les noms de répertoires
:-)

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.



Avatar
Stephane Chazelas
2003-11-27, 07:21(+01), Pascal Bourguignon:
[...]
Sinon, si on veut vraiment mettre dans une archive tous les fichiers
et sous-répertoires du répertoire courant, en incluant les dot-files,
on peut sélectionner ces dernier avec: .??*

tar zcvf archive.tar.gz .??* *

(ça sert dans d'autres cas:
mv .??* * ailleurs/
rm -rf .??*
# etc
)

Ceci dit, on loupe les fichiers dont le nom ne comporte qu'un point et
un caractère autre que point. Mais je suis sur que sur tous les
ordinateurs du monde mondial, il n'y a pas plus de 20 fichiers avec un
tel nom. En tout cas, personnellement, je n'en ai jamais vu, et j'ai
alias ls='/bin/ls -FaC' !


Si tu veux tous les fichiers, t'as * .??* .[!.]
L'inconvénient, c'est que si un fichier '.[!.]' existe et qu'il
n'y a pas de fichier qui matche .[!.], il sera compté deux fois,
vaut mieux : * .[!.]* ..?*

Sinon, avec zsh: *(D)
ou: setopt dotglob <et> *
avec bash: shopt -s dotglob <et> *
avec ksh93: FIGNORE='@(.|..)' <et> *

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Stephane Chazelas
2003-11-27, 08:25(+01), Éric Lévénez:
[...]
tar zcvf archive.tar.gz .??* *


Ne marche pas partout et est spécifique à certains shells.
[...]


??? Avec quel shell ça ne marcherait pas ? zsh, s'il n'y a
aucun fichier qui matche .??* ou *, mais sinon, je vois pas.
Meme dans le Thomson shell d'Unix V5, ça marche, ainsi qu'avec
les shells exotiques genre rc, es.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Pascal Bourguignon
Stephane Chazelas writes:
Si tu veux tous les fichiers, t'as * .??* .[!.]


Ça m'apprendra à lire et à relire man bash! Merci.

L'inconvénient, c'est que si un fichier '.[!.]' existe et qu'il
n'y a pas de fichier qui matche .[!.], il sera compté deux fois,
vaut mieux : * .[!.]* ..?*

Sinon, avec zsh: *(D)
ou: setopt dotglob <et> *
avec bash: shopt -s dotglob <et> *
avec ksh93: FIGNORE='@(.|..)' <et> *


Oui, c'est surement la meilleure solution.

--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/

Avatar
tealuvikg
Éric Lévénez wrote in message news:<BBEACC93.609D0%...
Le 26/11/03 21:23, dans ,

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *


tar cvzf ../archive.tar.gz .

"." indique le répertoire courant (avec tous les fichiers y compris les
cachés), et le ../ est là pour que la commande ne se morde pas la queue.


Merci pour cette réponse. J'ai l'impression d'avoir déclanché une
"tempête dans un verre d'eau" vu les autres réponses.

Jellyroll.


Avatar
Pascal Bourguignon
(Jellyroll) writes:

Éric Lévénez wrote in message news:<BBEACC93.609D0%...
Le 26/11/03 21:23, dans ,

Je cherche à archiver et compresser le répertoire courant et tous ses
sous-répertoires avec la commande :

tar cvfz archive.tar.gz *


tar cvzf ../archive.tar.gz .

"." indique le répertoire courant (avec tous les fichiers y compris les
cachés), et le ../ est là pour que la commande ne se morde pas la queue.


Merci pour cette réponse. J'ai l'impression d'avoir déclanché une
"tempête dans un verre d'eau" vu les autres réponses.


Pas du tout. Je me souviens d'une nouvelle de SF, où un jeune
survivant habitait un vaisseau spatial immense et désertique et ou ses
seuls contacts "humains" étaient avec des "archives mentales"
numériques des anciens membres d'équipages morts depuis longtemps, et
qui étaient bien utiles mais qui finissaient toujours par ratiociner
et discuter entre elles quand on leur posait des questions. Usenet me
fait souvent penser  à cette histoire...

Mais n'empêche que si tu utilise cette commande, tu pourras t'en
mordre les doigts un jour.

La commande correcte c'est (sous bash, pour les autres vois le message
de Stephane
Message-ID: ):

( shopt -s dotglob ; tar zcvf ../archive.tar.gz * )





--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/



Avatar
Stephane Dupille
Sinon, avec zsh: *(D)


Et pourquoi pas un * .* avec zsh ? Car ZSH vire toujours le . et le
.. dans le file globbing.

--
MW >Tss... Un cybermaquereau. On aura tout vu !
JdC> Pourquoi pas ? Il doit bien exister des cybermorues.
-+- in : <http://www.le-gnu.net> - Les joies du cybersexe -+-

Avatar
Stephane Chazelas
2003-11-28, 10:03(+01), Stephane Dupille:
Sinon, avec zsh: *(D)


Et pourquoi pas un * .* avec zsh ? Car ZSH vire toujours le . et le
.. dans le file globbing.


Parce que *(D) est fait pour ça, et que ça va faire échouer la
commande s'il n'y a pas de (D)otfile.

Vaut mieux (*|.*) (avec extendedglob) que * .*

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]