J'essaie de créer un programme graphique pour mon script.
Dans le script, j'utilise tar pour créer une archive tar.
Le programme graphique me donne le nom complet du fichier pour lequel je veux créer une archive tar.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Mon archive tar comprend les noms home, username, dir1, dir2 et selecteddir, alors que je veux que tar ne crée que des archives comprenant selecteddir.
dirname
pour tout extraire jusqu'à "selecteddir" etbasename
pour extraire "selecteddir". Essayez les deux commandes avec le $ path comme argument.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
ne fonctionnera pas.Vous pouvez utiliser deux méthodes pour aborder ce problème.
Le premier, à mon avis, est plus facile. Simplement
cd
dans le répertoire directement au-dessus de celui que vous voulez compresser. Dans ce cas, ce seraitdir2
.La deuxième façon consiste à utiliser l'option
--transform
qui prend unesed
expression et l'exécute en fonction des noms de fichiers. Remarque: vous devrez vous échapper/
dans l'sed
expression.la source
tar: Cowardly refusing to create an empty archive
. Quand j'ai le point, cela fait que la racine contient un répertoire nommé.
. Donc, proche mais pas parfait.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
a travaillé pour moi. Utiliser un astérisque au lieu d'un point.
. Mise à jour: Woops - Bien que j'ai perdu les fichiers cachés.Tout d'abord, allez dans le répertoire de travail,
Alors utilisez la magie
*
:-)la source
En fait, j'ai trouvé un problème en utilisant la réponse de Ketan
Lorsque vous voulez simplement copier tous les fichiers dans dir2, seulement tous les fichiers, je commence par en venir à l’idée:
Cependant, lorsque vous ne vous trouvez pas dans le répertoire dir2, cela poserait problème car * les fichiers tar seraient dans votre diectroy actuel. Et j'ai corrigé le problème en utilisant la commande ci-dessous:
la source
.
un dossier racine.