我想递归地重命名我的文件,以 *.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
我没有发布“树”的输出,因为发布后没有以正确的格式看到它。每个学名“Aaosphaeria_arxii”都有三个子目录,我只想从“latest_assembly_versions”文件夹中提取文件,扩展名为“_genomic.fna.gz”。在这种情况下,将*“_genomic.fna.gz”重命名为科学名称“Aaosphaeria_arxii”。
问候
您可以使用以下
rename
命令:前:
后:
解释
该
rename
工具使用 perl 替换运算符:rename 's/old/new/
. 这将通过替换为来重命名old
文件new
。可以是一个简单的old
字符串,也可以是一个正则表达式,就像这里一样。正则表达式可以简化为:
.+?/.*/.*
它匹配“直到第一个/
( ).+?/)
的所有内容,然后是最后一个 ( ) 之前的所有内容,然后是最后/
(.*/
) 之前的所有内容.*
。括号是所谓的“捕获组”。它们允许我们“捕获”匹配的字符串,然后将其作为$1
,$2
, ...$N
用于尽可能多的括号。所以,在这里,我们实际上有
((.+?)/.*/)(.*)
. 第一个外圆括号 (((.+?)/.*/)
) 获取文件名之前的所有内容,因此它们将获取文件的路径,直到父目录。这成为$1
. 第二个,内括号 ((.+?)
) 捕获成为的父目录$2
。最后的括号 ((.*)
) 捕获文件的名称。使用上述所有方法,我们将文件重命名为
$1$2_$3
. 这是$1
“文件的路径”(例如Aaosphaeria_arxii/all_assembly_versions/GCA_010015735.1_Aaoar1/
),然后$2
是父目录的名称,后跟a_
,最后$3
是原始文件名。您还没有向我们展示您期望的输出。如果您还想将文件移出其目录,则可以这样做:
这将产生以下内容: