/ / Supprimer la structure de répertoire lors de l'extraction de l'archive tar - tar, structure de répertoire

Supprimer la structure de répertoire lors de l'extraction de l'archive tar - tar, structure de répertoire

Supposons que j'ai créé une archive tar sur le serveur A à l'aide de tar -czvf subdir.tgz subdirectory/*. Si j'ai une structure parallèle sur le serveur B àque j’ai "copié cette archive et que je veux maintenant masquer ce même sous-répertoire - y compris la suppression de tous les fichiers de ce sous-répertoire qui ne sont pas présents dans l’archive tar - I pourrait cd dans le répertoire parent sur le serveur B, rm -rf subdirectory et alors tar -xzvf subdir.tgz.

Y a-t-il un moyen de le faire sans avoir à exécuter au préalable rm?

En guise de test, je mets un répertoire factice dans le serveur B à subdirectory/dummy/ et ensuite couru tar -xzvf subdir.tgz --recursive-unlink mais à ma grande surprise subdirectory/dummy/ était toujours là. Je suppose que j'ai mal compris ce que --recursive-unlink Est-ce que.

EDIT ========== voici un exemple. Je crée deux répertoires, qui représenteraient les deux répertoires "en miroir" sur deux serveurs différents (pensez à eux en tant que serveur "a" et serveur "b"). Dans le répertoire de destination ("b"), je crée un répertoire supplémentaire et certains fichiers qui ne figureront pas dans l'archive tar. Celles-ci, je m'attends à être écrasées et supprimées. Essentiellement, tout ce que je veux dans le répertoire "b" quand j'ai terminé, ce sont les fichiers du répertoire "a". Mais, comme on peut le voir dans l'exemple, malgré --unlink-first et --recursive-unlink le répertoire et les fichiers superflus sont toujours là après la décompression.

-bash-3.2$ mkdir tartest
-bash-3.2$ cd tartest
-bash-3.2$ mkdir a
-bash-3.2$ mkdir b
-bash-3.2$ cd a
-bash-3.2$ mkdir xyz
-bash-3.2$ cd xyz
-bash-3.2$ touch test.1
-bash-3.2$ touch test.2
-bash-3.2$ cd ../
-bash-3.2$ touch test.3
-bash-3.2$ cd ../b
-bash-3.2$ mkdir abc
-bash-3.2$ cd abc
-bash-3.2$ touch test.4
-bash-3.2$ cd ../../a
-bash-3.2$ tar cvf ../archive.tar ./*
./test.3
./xyz/
./xyz/test.2
./xyz/test.1
-bash-3.2$ cd ../b
-bash-3.2$ tar -xf ../archive.tar --unlink-first --recursive-unlink
-bash-3.2$ ls
total 16K
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:58 .
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:57 ..
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 abc
-rw-r--r-- 1 iponly168797 iponly168797    0 Jan 27 13:56 test.3
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 xyz
-bash-3.2$ ls xyz
total 8.0K
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 .
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:58 ..
-rw-r--r-- 1 iponly168797 iponly168797    0 Jan 27 13:56 test.1
-rw-r--r-- 1 iponly168797 iponly168797    0 Jan 27 13:56 test.2

Réponses:

1 pour la réponse № 1

--recursive-unlink supprime uniquement les fichiers et les répertoires, si cela vous empêche d'extraire les nouveaux fichiers. Pour votre but, ajoutez --unlink-first. Avec les deux options, les fichiers et les répertoires not dans le nouveau goudron sera supprimé avant.

Voilà comment ça marche pour moi:

ott@hv:~/tmp/tar $ tar cvf a.tar a
a/
a/test.txt
a/b/
a/c/
a/a/
ott@hv:~/tmp/tar $ cd b
ott@hv:~/tmp/tar/b $ tar xvf ../a.tar
a/
a/test.txt
a/b/
a/c/
a/a/
ott@hv:~/tmp/tar/b $ cd ../a
ott@hv:~/tmp/tar/a $ rmdir b
ott@hv:~/tmp/tar/a $ rm test.txt
rm: reguläre leere Datei »test.txt« entfernen? y
ott@hv:~/tmp/tar/a $ cd ..
ott@hv:~/tmp/tar $ tar cvf a.tar a
a/
a/c/
a/a/
ott@hv:~/tmp/tar $ cd b
ott@hv:~/tmp/tar/b $ tar xvf ../a.tar --unlink-first --recursive-unlink
a/
a/c/
a/a/
ott@hv:~/tmp/tar/b $ ls -lR
.:
insgesamt 8
drwxr-xr-x 4 ott ott 4096 31. Okt 19:21 a

./a:
insgesamt 16
drwxr-xr-x 2 ott ott 4096 28. Okt 21:31 a
drwxr-xr-x 2 ott ott 4096 28. Okt 21:31 c

./a/a:
insgesamt 0

./a/c:
insgesamt 0
ott@hv:~/tmp/tar/b $ tar --version
tar (GNU tar) 1.20

Peut-être que vous avez un goudron différent?