ファイル名をより単純な名前に再帰的に変更します。

ファイル名をより単純な名前に再帰的に変更します。

私のファイル名は次のとおりです。

A06_S6_L001_R1_001.fastq
A06_S6_L001_R2_001.fastq
B07_S6_L001_R1_001.fastq
B07_S6_L001_R2_001.fastq
C08_S6_L001_R1_001.fastq
C08_S6_L001_R2_001.fastq

そして私はほしい:

1A06.R1.fastq
1A06.R2.fastq
1B07.R1.fastq
1B07.R2.fastq
etc...

つまり、最初の下線の前の部分、最後の下線の前の部分を維持し、それらの.間に1つを置き、ファイル拡張子を維持し、全体の前に数字を入れたいと思います。 Perl renameがあるので、このコマンドを使用する方が良いと思いますが、正規表現がわかりません...

答え1

prename方法:

prename -n 's/^([^_]+)_.*_([^_]+)_[0-9]+\./1$1.$2./' *.fastq

( -n-アクションなし;どのファイルの名前が変わるかを示します)

答え2

bashを使用し、前の接頭辞とdirname仮定します。1

shopt -s globstar
for file in ./**/*.fastq
do
  [[ $file =~ (...)_(..)_(....)_(..)_(...).fastq ]] && 
  printf "%s\n" "mv -- "$file" "$(dirname "$file")"/1${BASH_REMATCH[1]}.${BASH_REMATCH[4]}.fastq"
done

この例の「入力」を使用します。

touch A06_S6_L001_R1_001.fastq A06_S6_L001_R2_001.fastq B07_S6_L001_R1_001.fastq B07_S6_L001_R2_001.fastq C08_S6_L001_R1_001.fastq C08_S6_L001_R2_001.fastq
mkdir subdir
cp *.fastq subdir/

結果の出力は次のとおりです。

mv ./A06_S6_L001_R1_001.fastq ./1A06.R1.fastq
mv ./A06_S6_L001_R2_001.fastq ./1A06.R2.fastq
mv ./B07_S6_L001_R1_001.fastq ./1B07.R1.fastq
mv ./B07_S6_L001_R2_001.fastq ./1B07.R2.fastq
mv ./C08_S6_L001_R1_001.fastq ./1C08.R1.fastq
mv ./C08_S6_L001_R2_001.fastq ./1C08.R2.fastq
mv ./subdir/A06_S6_L001_R1_001.fastq ./subdir/1A06.R1.fastq
mv ./subdir/A06_S6_L001_R2_001.fastq ./subdir/1A06.R2.fastq
mv ./subdir/B07_S6_L001_R1_001.fastq ./subdir/1B07.R1.fastq
mv ./subdir/B07_S6_L001_R2_001.fastq ./subdir/1B07.R2.fastq
mv ./subdir/C08_S6_L001_R1_001.fastq ./subdir/1C08.R1.fastq
mv ./subdir/C08_S6_L001_R2_001.fastq ./subdir/1C08.R2.fastq

printf "%s\n"結果が正確に見える場合は削除してください。

関連情報