[英]How to rename files in bash to increase number in name?
我有幾千個文件,名稱如下:
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上的解決方案感到幸運在文件名內
但是我不能在名稱中使用它,如果可以,我正在Ubuntu 18.04上運行
如果你能得到的Perl的口味版本保持rename
,這是簡單的是這樣的:
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
,這意味着評估替換中的表達式-或我稱其為“計算的替換” 。
如果您的字符串中只有一個數字,則下面兩行代碼應該可以幫助您解決問題
filename="Vibrio_cholerae_3900_nanopore_trim_reads.fasta"
var=$(echo $filename | grep -oP '\d+')
echo ${filename/${var}/$((var+100))}
您可以將其放入變量中,然后使用mv
命令重命名,而不必回顯更改的文件名。
考慮到文件名的升序沖突,我首先想到了顛倒順序,但是由於數字排序的差異,仍然存在字母(標准)排序沖突的可能性。
然后是兩步解決方案:在第一步中,將轉義字符(或文件名中未出現的任何字符)插入文件名中,並在第二步中將其刪除。
#!/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
Mark的perl-rename解決方案看起來不錯,但您應套用兩次,每次顛倒50,以避免名稱沖突。 如果找不到這種重命名風格,則可以嘗試使用我的rene.py( https://rene-file-renamer.sourceforge.io ),對其使用命令(也要兩次) rene *_*_*_* *_*_?_* B/50
。 rene會更容易一些,因為它會自動向您顯示更改並詢問您是否要進行更改,並且如果您改變主意,則可以撤消操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.