폴더 내의 파일 이름 바꾸기

폴더 내의 파일 이름 바꾸기

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

관련 정보