bashまたは正規表現を使用して、複数の文字と数字の組み合わせとサイズで複数のファイルの名前を変更するにはどうすればよいですか?

マルセル・ラウクス

私はファイルのリストの名前を変更しようとしてきましたが、それは非常に困難でした... 41のファイル名は次のとおりです。

    BEIII_S29_pear_derep.fasta
    BEII_S15_pear_derep.fasta
    BEI_S1_pear_derep.fasta 
    MB211III_S30_pear_derep.fasta
    MB211II_S16_pear_derep.fasta
    MB211I_S2_pear_derep.fasta
    ... 

名前を変更する必要があります:

    BEIII.fas
    BEII.fas
    BEI.fas
    MB211III.fas
    MB211II.fas
    MB211I.fas

forループを使用してみました:

    for i in *_S[0-9]{1,2}_pear_derep.fasta; do newfile="$(basename $i _S[0-9]{1,2}_pear_derep.fasta)"; echo $newfile; cp ${newfile}_S[0-9]{1,2}_pear_derep.fasta ${newfile}.fas; done;

それはうまくいきませんでした

    rename 's/([A-Z]*[0-9]*[I]{1,4})_[A-Z][0-9]_[a-z]_[a-z]{1,5}(\.fasta).*/$1$2/g' *

それはうまくいきませんでした

    for file in *.fas; do newfile=$(echo "$file" | sed -re 's/S_[0-9][0-9](\.)/\./g') mv -v $file $newfile; done;

それらのどれも機能しませんでした。ここで重要なのは、正規表現を使用して変数の開始を維持する必要があるということです。

    [A-Z]{2}[0-9]{3}[I]{1,3} 

その後、他のすべてが除外されます

    S[0-9]{1,2}_[a-z]{4}_[a-z]{5} and then the extension .fasta to .fas

誰かが私を助けてくれませんか?君たちありがとう

バイユー

*\.fasta必要なすべてのファイルをターゲットにしていることを確認する必要があります。mvコマンドをエコーするか、ディレクトリのコピーを作成して、最初にそこで試してください。

for i in *\.fasta; do 
    mv $i ${i/_*/}.fas;
done

置換${i/_*/}により、最初の_以降のすべてが削除されます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ