1 votes

Renommer les noms de fichiers avec le nom du répertoire parent

Je souhaite renommer mes fichiers de manière récursive, en terminant par *.fna.gz avec le répertoire parent en deux étapes, c'est-à-dire "Aspergillus_neoniger". Vous pouvez voir les détails des sous-répertoires dans cette image

commande d'arbre image

.
 Aaosphaeria_arxii
    all_assembly_versions
       GCA_010015735.1_Aaoar1
           GCA_010015735.1_Aaoar1_assembly_structure
           GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
           GCA_010015735.1_Aaoar1_genomic.fna.gz
           GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
    latest_assembly_versions
       GCA_010015735.1_Aaoar1
           GCA_010015735.1_Aaoar1_assembly_structure
           GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
           GCA_010015735.1_Aaoar1_genomic.fna.gz
           GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
    representative
        GCA_010015735.1_Aaoar1
            GCA_010015735.1_Aaoar1_assembly_structure
            GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
            GCA_010015735.1_Aaoar1_genomic.fna.gz
            GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz 

Je n'ai pas posté la sortie de "tree" parce qu'elle n'était pas affichée dans un format correct après avoir été postée. Chaque nom scientifique "Aaosphaeria_arxii" a trois sous-répertoires, je veux juste extraire les fichiers du dossier "latest_assembly_versions" avec l'extension "_genomic.fna.gz". Et renommer *"_genomic.fna.gz" avec le nom scientifique "Aaosphaeria_arxii" dans ce cas.

Salutations

5voto

Stewart Points 1385

Vous pouvez utiliser le rename commande :

rename 's|((.+?)/.*/)(.*)|$1$2_$3|' */*/*/*fna.gz

Avant :

$ tree
.
 Aaosphaeria_arxii
     all_assembly_versions
        GCA_010015735.1_Aaoar1
            GCA_010015735.1_Aaoar1_assembly_structure
            GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
            GCA_010015735.1_Aaoar1_genomic.fna.gz
            GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
     latest_assembly_versions
        GCA_010015735.1_Aaoar1
            GCA_010015735.1_Aaoar1_assembly_structure
            GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
            GCA_010015735.1_Aaoar1_genomic.fna.gz
            GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
     representative
         GCA_010015735.1_Aaoar1
             GCA_010015735.1_Aaoar1_assembly_structure
             GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
             GCA_010015735.1_Aaoar1_genomic.fna.gz
             GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz

7 directories, 12 files

Après :

$ tree
.
 Aaosphaeria_arxii
     all_assembly_versions
        GCA_010015735.1_Aaoar1
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_genomic.fna.gz
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
            GCA_010015735.1_Aaoar1_assembly_structure
     latest_assembly_versions
        GCA_010015735.1_Aaoar1
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_genomic.fna.gz
            Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
            GCA_010015735.1_Aaoar1_assembly_structure
     representative
         GCA_010015735.1_Aaoar1
             Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
             Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_genomic.fna.gz
             Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz
             GCA_010015735.1_Aaoar1_assembly_structure

7 directories, 12 files

Explication

Les rename utilise l'opérateur de substitution perl : rename 's/old/new/ . Ceci renommera le fichier en remplaçant old con new . En old peut être une simple chaîne de caractères, ou une expression régulière comme c'est le cas ici.

L'expression régulière peut être simplifiée comme suit : .+?/.*/.* qui correspond à "tout jusqu'au premier / ( .+?/) puis tout jusqu'au dernier / ( .*/ ) et ensuite tout jusqu'à la fin ( .* ). Les parenthèses sont ce que l'on appelle des "groupes de capture". Ils nous permettent de "capturer" la chaîne de caractères correspondante et de la rendre disponible en tant que $1 , $2 , ... $N pour autant de parenthèses que vous en avez.

Ici, nous avons donc ((.+?)/.*/)(.*) . La première parenthèse extérieure ( ((.+?)/.*/) ) obtiennent tout jusqu'au nom du fichier, ils obtiendront donc le chemin d'accès au fichier, jusqu'au répertoire parent. Cela devient $1 . La deuxième parenthèse intérieure ( (.+?) ) capture le répertoire parent qui devient $2 . Les dernières parenthèses ( (.*) ) capture le nom du fichier.

En utilisant tout ce qui précède, nous renommons le fichier en $1$2_$3 . Il s'agit de $1 le chemin d'accès au fichier" (par ex. Aaosphaeria_arxii/all_assembly_versions/GCA_010015735.1_Aaoar1/ ), alors $2 le nom du répertoire parent suivi d'un _ et enfin $3 le nom du fichier original.


Vous ne nous avez toujours pas montré quel résultat vous attendez. Si vous voulez également déplacer les fichiers hors de leurs répertoires, vous pouvez faire ceci à la place :

rename 's|((.+?)/.*/)(.*)|$2_$3|' */*/*/*fna.gz

Il en résultera ce qui suit :

$ tree
.
 Aaosphaeria_arxii
    all_assembly_versions
       GCA_010015735.1_Aaoar1
           GCA_010015735.1_Aaoar1_assembly_structure
    latest_assembly_versions
       GCA_010015735.1_Aaoar1
           GCA_010015735.1_Aaoar1_assembly_structure
    representative
        GCA_010015735.1_Aaoar1
            GCA_010015735.1_Aaoar1_assembly_structure
 Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_cds_from_genomic.fna.gz
 Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_genomic.fna.gz
 Aaosphaeria_arxii_GCA_010015735.1_Aaoar1_rna_from_genomic.fna.gz

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X