Tar --transform : petite difficulté

Bonjour,

Je cherche à faire des modifications sur le nom complet des fichiers d'une archive tar lors de son extraction.

Plutôt que d'expliquer avec des mots, voici quelques exemples avec ce que je souhaite obtenir :

Imaginons une archive avec :
dossier1/ssdossier1/ssdossier2/fichier1
dossier1/fichier2
dossier1/ssdossier1/ssdossier2/fichier3
fichier4
dossier2/ssdossier3/fichier6


Il faudrait qu'en sortie tar me crée grâce aux expressions régulières des --transform (ou autre paramètre auquel je n'aurais pas pensé) :
Un dossier nommé dossier1_ssdossier1_ssdossier2/ contenant fichier1 et fichier3
Un dossier nommé dossier1 avec fichier2 dedans
Le fichier 4
Un dossier nommé dossier2_ssdossier3/ contenant fichier6.


Le problème en remplaçant les / par des _ est qu'il faut que je conserve le dernier / mais je ne trouve comment.

Auriez-vous une idée ?
D'avance, merci !

1 réponse

  1. Contributeur
    hello
    essayer cette expresson
    $ sed -r 's+/+_+g; s+_([^_]*$)+/\1+' fichier
    dossier1_ssdossier1_ssdossier2/fichier1
    dossier1/fichier2
    dossier1_ssdossier1_ssdossier2/fichier3
    fichier4
    dossier2_ssdossier3/fichier6
    1. Salut,
      Merci,
      Je pense hélas que ça ne va pas fonctionner si un fichier contient un ou plusieurs caractère _

      J'essaie
    2. Contributeur
      @gnu5Salut,
      Je pense hélas que ça ne va pas fonctionner si un fichier contient un ou plusieurs caractère _
      En même temps ça ne faisait pas partie de la demande initiale ;-\
    3. Contributeur
      @gnu5je ne pense pas que des fichiers contiennent des ;
      essayer
      $ sed -r 's+/+;+g; s+;([^;]*$)+/\1+; s+;+_+g'  fichier
    4. Contributeur
      @dubcekIl n'est pas question de points virgules, mais d'underscores ;-(
    5. Contributeur
      on remplace les / par des ;
      on remplace le dernier ; par un /
      on remplace les ; par des _