如何在bash中重命名文件以增加名称数量?

Mol*_*t29 2 linux bash rename

我有几千个文件命名如下:

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 上运行

Mar*_*ell 6

如果你能掌握 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替换结束时使用 ,这意味着评估替换中的表达式 - 或者我称之为“计算替换”

  • 如果您想在数字旁边添加文本,可以使用 `s/(\d+)/"blabla".($1+100)/e` (2认同)