我有几千个文件命名如下:
Cyprinus_carpio_600_nanopore_trim_reads.fasta
Cyprinus_carpio_700_nanopore_trim_reads.fasta
Cyprinus_carpio_800_nanopore_trim_reads.fasta
Cyprinus_carpio_900_nanopore_trim_reads.fasta
Vibrio_cholerae_3900_nanopore_trim_reads.fasta
Run Code Online (Sandbox Code Playgroud)
对于前两个词的 80 个变体(80 个不同的物种),我想重命名所有这些文件,使数字增加 100 - 例如:
Vibrio_cholerae_3900_nanopore_trim_reads.fasta
Run Code Online (Sandbox Code Playgroud)
会成为
Vibrio_cholerae_4000_nanopore_trim_reads.fasta
Run Code Online (Sandbox Code Playgroud)
或者
Cyprinus_carpio_300_nanopore_trim_reads.fasta
Run Code Online (Sandbox Code Playgroud)
会成为
Cyprinus_carpio_400_nanopore_trim_reads.fasta
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法弄清楚如何重命名它们,我很幸运地遵循了https://unix.stackexchange.com/questions/40523/rename-files-by-incrementing-a-number上的解决方案- 文件名内
但我无法让它在名称内部工作,如果有帮助,我正在 Ubuntu 18.04 上运行
如果你能掌握 Perl 风格的 版本rename,那就很简单了:
rename -n 's/(\d+)/$1 + 100/e' *fasta
Run Code Online (Sandbox Code Playgroud)
样本输出
'Ciprianus_maximus_11_fred.fasta' would be renamed to 'Ciprianus_maximus_111_fred.fasta'
'Ciprianus_maximus_300_fred.fasta' would be renamed to 'Ciprianus_maximus_400_fred.fasta'
'Ciprianus_maximus_3900_fred.fasta' would be renamed to 'Ciprianus_maximus_4000_fred.fasta'
Run Code Online (Sandbox Code Playgroud)
如果你看不懂 Perl,它会说…… “做一个如下的替换。无论你在哪看到一堆数字排成一排 ( \d+),记住它们(因为我把它放在括号里),并且然后用那串数字 ( $1) 加上 100的计算表达式替换它们。” .
-n如果试运行看起来正确,则删除。唯一的“棘手部分”是在e替换结束时使用 ,这意味着评估替换中的表达式 - 或者我称之为“计算替换”。