フォルダ内のファイル名を変更する

フォルダ内のファイル名を変更する

2つのfastq.gzファイルを含む複数のフォルダがあります。通常、名前はSample_R1.fastq.gzとSample_R2.fastq.gzです。ここで、サンプル_はフォルダ名または他の名前を表すことができます。

しかし、私の場合、フォルダは次のようになります。

1008_a
2085_a
2130_a
2192_a
2221_a
2242_a
2269_a
2482_a

各フォルダには次のファイルが含まれています。

1008_aファイル: C85CBANXX_s6_1_O07_0452_SL137634.fastq.gz C85CBANXX_s6_2_O07_0452_SL137634.fastq.gz

2085_a:

C7V65ANXX_s6_1_M19_0413_SL131164.fastq.gz C7V65ANXX_s6_2_M19_0413_SL131164.fastq.gz

このファイルの名前を次のように変更するにはどうすればよいですか?1008_a_R1.fastq.gz & 1008_a_R2.fastq.gz フォルダ1008_aの場合

2085_a_R1.fastq.gz ,2085_a_R2.fastq.gz フォルダ2085_aの場合

など、他のすべてのフォルダには、内部にさまざまな種類のパターンがあります。

ありがとう、ロン

ベストアンサー1

find+bash解決策:

フォルダ構造の例(例:1080_a2085_a):

$ tree 1008_a/ 2085_a/
1008_a/
├── C85CBANXX_s6_1_O07_0452_SL137634.fastq.gz
└── C85CBANXX_s6_2_O07_0452_SL137634.fastq.gz
2085_a/
├── C7V65ANXX_s6_1_M19_0413_SL131164.fastq.gz
└── C7V65ANXX_s6_2_M19_0413_SL131164.fastq.gz

働く:

find . -type f -regextype posix-egrep \
-regex ".*/[0-9]{4}_a/[[:alnum:]_]+_[12]_[[:alnum:]_]+\.fastq\.gz$" -exec bash -c \
'path=${0%/*}/; bn=${0##*/}; dir_n=${0%/*}; dir_n=${dir_n##*/}; 
 new_fn=$(sed -E "s/.+_([12])_.+(\.fastq\.gz)$/${dir_n}_R\1\2/" <<<"$bn"); 
 mv "$0" "$path$new_fn"' {} \;

結果:

$ tree 1008_a/ 2085_a/
1008_a/
├── 1008_a_R1.fastq.gz
└── 1008_a_R2.fastq.gz
2085_a/
├── 2085_a_R1.fastq.gz
└── 2085_a_R2.fastq.gz

おすすめ記事