web-dev-qa-db-fra.com

création d'une archive tar sans inclure le répertoire parent

J'essaie de créer un programme graphique pour mon script.

Dans le script, j'utilise tar pour créer une archive tar.

Du programme graphique, j'obtiens le nom complet du fichier que je veux créer une archive tar.

tar -cvf temp.tar /home/username/dir1/dir2/selecteddir 

Mon archive tar comprend la maison, le nom d'utilisateur, dir1, dir2 et selecteddir tandis que je veux que tar crée une archive comprenant uniquement selecteddir.

65
Sujit Maharjan

Vous pouvez utiliser le -C option de tar pour accomplir ceci:

tar -C /home/username/dir1/dir2 -cvf temp.tar selecteddir

Depuis la page de manuel de tar:

-C directory
         In c and r mode, this changes the directory before adding the following files.  
         In x mode, change directories after opening the archive but before extracting 
         entries from the archive.
82
mkc

Il existe deux méthodes que vous pouvez utiliser pour résoudre ce problème.

Le premier, à mon avis, est plus facile. Il suffit de cd dans le répertoire directement au-dessus de celui que vous souhaitez compresser. Dans ce cas, ce serait dir2.

$ cd /home/username/dir1/dir2/
$ tar -cvf temp.tar selecteddir

La deuxième façon consiste à utiliser l'option --transform qui prend une expression sed et l'exécute avec les noms de fichiers. Remarque: vous devrez vous échapper / dans l'expression sed.

$ tar -cvf temp.tar /home/username/dir1/dir2/selecteddir --transform='s/\/home\/username\/dir1\/dir2\///g'
11
ryanmjacobs

Tout d'abord, allez dans le répertoire de travail,

cd /your/working/directory/ 

Ensuite, utilisez la magie * :-)

tar -cvf temp.tar *
5
Yas

En fait, j'ai trouvé un problème en utilisant la réponse de Ketan

tar -C/home/nom d'utilisateur/dir1/dir2 -cvf temp.tar selecteddir

Lorsque vous voulez simplement copier tous les fichiers juste en dir2, juste tous les fichiers, je commence d'abord par l'idée:

tar -C/home/nomutilisateur/dir1/dir2 -cvf temp.tar *

Cependant, lorsque vous n'êtes pas dans le répertoire dir2, cela causerait un problème puisque * tarerait les fichiers dans votre diectroy actuel. Et j'ai résolu le problème en utilisant la commande ci-dessous:

 tar -C /home/username/dir1/dir2 -cvf temp.tar ./
3
Guan YANG