次の文字を削除するためにファイル名の配置を変更したいと思います。
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
あなたが持っているならrename
(prename
):
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)
答え2
使用rename
コマンド:
for f in *.fastq; do rename 's/P\./\./' "$f" ; done
's/P\./\./
-真珠式の置換:P
末尾の削除.
(ファイル拡張子の前)