Je fais actuellement dans un shellscript très inefficacement:
cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION
Je veux que tout soit contenu dans le répertoire appelé $ VERSION - existe-t-il un moyen de le faire sans avoir à tout copier comme dans le script ci-dessus?
tar cjf archive.tar.bz2 $MYPATH
?Réponses:
La version GNU de
tar
prend en charge l'--transform
option (et son alias--xform
), vous pouvez l'utiliser comme ceciPar exemple, étant donné cette arborescence de répertoires
la commande
produira une archive comme
la source
flags=r;
résolution résout le problème tel que mentionné dans stackoverflow.com/a/29661783/388803 .s/^a\//b\//
, latar -t
montre toujoursa/
alors que tous les autres fichiers sont sousb/
; Je suppose que c'est dangereux, et je n'ai pas vraiment besoin de me protéger contre un autre fichier avec le même préfixe qui n'est pas un répertoire dans le fichier tar; donc aucune barre oblique ne va bien, cela ne me dérangerait pas de savoir la meilleure façon de gérer le cas de laa/
transformation, mais pasaa/
s'il s'agissait d'un frère du nœud racine.Pour tarer le répertoire courant et ajouter un préfixe, cela a fonctionné pour moi:
la source
Si vous pouvez vous en sortir sans conserver de liens symboliques dans l'arborescence de fichiers que vous goudronnez, vous pouvez le faire
L'
h
option signifie des liens symboliques de déréférencement, c'est-à-dire inclure le fichier ou le répertoire vers lequel le lien pointe plutôt que d'enregistrer simplement le fait qu'il y avait un lien symbolique et ce qu'il pointait.la source
Pour ajouter un préfixe de répertoire confortablement, utilisez un séparateur différent de celui
/
de l'--transform
argument, par exemple+
ou,
similaire dans la réponse d'Andy.Donc, pour un cas plus simple, vous avez un tas de fichiers dans le répertoire actuel et vous ne voulez pas créer de tarbomb .
La syntaxe est
s+search+replace+
, et correspond^
simplement au début du nom de fichier.Et maintenant, juste pour répondre à l'OP - eh bien, vous pouvez éviter de copier tout votre répertoire
/tmp
en exécutant:Alternativement:
(lien dur, évite les problèmes avec les liens symboliques)
Les deux derniers ont été inclus pour la valeur de divertissement, je m'en tiendrai à la réponse de toro2k.
la source