我想递归地重命名我的文件,以 *.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
Run Code Online (Sandbox Code Playgroud)
我没有发布“树”的输出,因为发布后没有以正确的格式看到它。每个学名“Aaosphaeria_arxii”都有三个子目录,我只想从“latest_assembly_versions”文件夹中提取带有“_genomic.fna.gz”扩展名的文件。在这种情况下,将 *"_genomic.fna.gz" 重命名为科学名称 "Aaosphaeria_arxii"。
问候
您可以使用以下rename
命令:
rename 's|((.+?)/.*/)(.*)|$1$2_$3|' */*/*/*fna.gz
Run Code Online (Sandbox Code Playgroud)
前:
$ 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
Run Code Online (Sandbox Code Playgroud)
后:
$ 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
Run Code Online (Sandbox Code Playgroud)
该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
是原始文件名。
您仍然没有向我们展示您期望的输出。如果您还想将文件移出其目录,则可以改为执行以下操作:
rename 's|((.+?)/.*/)(.*)|$2_$3|' */*/*/*fna.gz
Run Code Online (Sandbox Code Playgroud)
这将产生以下内容:
$ 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
Run Code Online (Sandbox Code Playgroud)