ファイル名から文字/文字を削除する方法

ファイル名から文字/文字を削除する方法

次の文字を削除するためにファイル名の配置を変更したいと思います。

Stain-A_1P.fastq  to Strain-A_1.fastq
Strain-A_2P.fastq  to  Strain-A_2.fastq

私は以下を試しました:

rename 's/P//' *fastq
for file in *; do mv "$file" `echo $file | tr 'P' ''` ; done

ベストアンサー1

bashまたは他のPOSIXシェルを使用してください。

for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
  • for f in *.fastq繰り返し.fastqファイル

  • ext="${f##*.}"${f##*.})を取得し、ファイル拡張子を変数として保存します。ext

  • ${f%?.*}最後の文字の後の文字部分を取得します。.

  • mv "$f" "${f%?.*}.${ext}"名前変更操作を実行し、切り捨てられたプレフィックスで拡張子を追加します。

echoこれは実際の作業のプレビューです。

for f in *.fastq; do ext="${f##*.}"; mv -- "$f" "${f%?.*}.${ext}"; done

あなたが持っているならrenameprename):

rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
  • .*最後の部分を一致させるために貪欲な一致を使用します。.

  • キャプチャされた最初のグループには、最後から2番目の文字までの部分が含まれます。.

  • 2番目のキャプチャグループには、最後のキャプチャグループ以降の部分が含まれています.(含む.)。

-n実用的な行動を捨ててください:

rename 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq

例:

% ls -1d -- *.fastq
Stain-A_1P.fastq
Strain-A_2P.fastq

% for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done 
mv -- Stain-A_1P.fastq Stain-A_1.fastq
mv -- Strain-A_2P.fastq Strain-A_2.fastq

% rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
rename(./Stain-A_1P.fastq, ./Stain-A_1.fastq)
rename(./Strain-A_2P.fastq, ./Strain-A_2.fastq)

おすすめ記事