我有几千个文件,命名如下:
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
对于前两个单词的80个变体(80个不同的种类),我想重命名所有这些文件,以使数字增加100-例如:
Vibrio_cholerae_3900_nanopore_trim_reads.fasta
将成为
Vibrio_cholerae_4000_nanopore_trim_reads.fasta
或
Cyprinus_carpio_300_nanopore_trim_reads.fasta
将成为
Cyprinus_carpio_400_nanopore_trim_reads.fasta
不幸的是,我不知道如何重命名它们,我对遵循https://unix.stackexchange.com/questions/40523/rename-files-by-incrementing-a-number-within-the-filename上的解决方案感到很幸运
但是我无法在名称中使用它,如果有帮助,我可以在Ubuntu 18.04上运行
答案 0 :(得分:2)
如果您可以掌握rename
的Perl风格的版本,那就很简单:
rename -n 's/(\d+)/$1 + 100/e' *fasta
示例输出
'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'
如果您看不懂Perl,则表示... “执行以下单个替换。无论何时看到一排彼此相邻的数字(\d+
),请记住(因为我将其放在括号中),然后将其替换为该串数字的评估表达式($1
加100。” 。
如果试运行看起来正确,请删除-n
。唯一的“棘手部分” 是在替换结束时使用e
,这意味着 evaluate 替换中的表达式-或者我称其为< em>“计算出的替换量” 。
答案 1 :(得分:1)
如果您的字符串中只有一个数字,那么下面两行代码应该可以帮助您解决问题
filename="Vibrio_cholerae_3900_nanopore_trim_reads.fasta"
var=$(echo $filename | grep -oP '\d+')
echo ${filename/${var}/$((var+100))}
您可以将其带入变量中并使用mv
命令重命名,而不用回显已更改的文件名
答案 2 :(得分:0)
考虑到文件名的升序冲突,我首先想到了颠倒顺序,但是由于数字排序的差异,仍然存在字母(标准)排序冲突的可能性。
然后是两步解决方案:第一步,在文件名中插入转义字符(或文件名中未出现的任何字符),然后在第二步中将其删除。
#!/bin/bash
esc=$'\033' # ESC character
# 1st pass: increase the number by 100 and insert a ESC before it
for f in *.fasta; do
num=${f//[^0-9]/}
num2=$((num + 100))
f2=${f/$num/$esc$num2}
mv "$f" "$f2"
done
# 2nd pass: remove the ESC from the filename
for f in *.fasta; do
f2=${f/$esc/}
mv "$f" "$f2"
done
答案 3 :(得分:0)
Mark的perl-rename解决方案看起来不错,但是您应套用50两次以免名称冲突。如果找不到这种重命名的方式,则可以尝试使用我的rene.py(https://rene-file-renamer.sourceforge.io),该命令将被应用(也应用两次)rene *_*_*_* *_*_?_* B/50
。 rene会更容易一点,因为它会自动向您显示更改并询问您是否要进行更改,并且如果您改变主意,则可以撤消操作。