使用父目录名称重命名文件名

使用父目录名称重命名文件名

我想以递归方式重命名我的文件,以 *.fna.gz 结尾,父目录向上两级,即“Aspergillus_neoniger”。您可以在此图中查看子目录详细信息

树命令图像

.
├── 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 

我没有发布“tree”的输出,因为发布后无法以正确的格式看到它。每个科学名称“Aaosphaeria_arxii”都有三个子目录,我只想从“latest_assembly_versions”文件夹中提取带有“_genomic.fna.gz”扩展名的文件。在本例中,将*“_genomic.fna.gz”重命名为科学名称“Aaosphaeria_arxii”。

问候

答案1

您可以使用以下rename命令:

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

前:

$ 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

后:

$ 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

解释

rename工具使用 perl 替换运算符: 。这将通过替换来rename 's/old/new/重命名文件。可以是一个简单的字符串,也可以是一个正则表达式,就像这里一样。oldnewold

正则表达式可以简化为:.+?/.*/.*匹配“直到第一个/(的所有内容.+?/),然后是直到最后一个/( .*/) 的所有内容,然后是直到末尾 ( .*) 的所有内容”。括号就是所谓的“捕获组”。它们允许我们“捕获”匹配的字符串,然后将其作为$1, $2, ...$N提供给尽可能多的括号。

因此,这里我们实际上有((.+?)/.*/)(.*)。第一个外括号 ( ((.+?)/.*/)) 获取直到文件名的所有内容,因此它们将获取文件的路径,直到父目录。这变为$1。第二个内括号 ( (.+?)) 捕获父目录,它变为$2。最后一个括号 ( (.*)) 捕获文件的名称。

使用以上所有方法,我们将文件重命名为$1$2_$3。这是$1“文件的路径”(例如Aaosphaeria_arxii/all_assembly_versions/GCA_010015735.1_Aaoar1/),然后$2是父目录的名称,后跟,_最后是$3原始文件名。


您仍未向我们展示您期望的输出。如果您还想将文件移出其目录,您可以改为执行以下操作:

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

这将产生以下内容:

$ 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

相关内容