重命名文件夹内的文件

重命名文件夹内的文件

我有几个文件夹,每个文件夹包含两个文件 fastq.gz。通常它们被命名为sample_R1.fastq.gz和sample_R2.fastq.gz。其中sample_可以代表文件夹名称或其他名称。

但就我而言,文件夹是:

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

相关内容