이전 파일 이름의 일부를 포함하여 일괄 이름 바꾸기 파일 이름

이전 파일 이름의 일부를 포함하여 일괄 이름 바꾸기 파일 이름

다음과 같은 파일 목록이 있습니다.

11F.fastq.gz
11R.fastq.gz
12F.fastq.gz
12R.fastq.gz

이 파일 이름을 다음과 같이 바꾸고 싶습니다.

11_S11_L001_R1_001.fastq.gz
11_S11_L001_R2_001.fastq.gz
12_S12_L001_R1_001.fastq.gz
12_S12_L001_R2_001.fastq.gz

나는 reanme다음과 같이 시도했다

rename 's/F.fastq/_S_L001_R1_001.fastq/' *.gz
rename 's/R.fastq/_S_L001_R2_001.fastq./' *.gz

하지만 "S"(이 경우 11과 12) 뒤에 파일 번호를 추가하는 방법을 잘 모르겠습니다. 어떤 조언이라도 대단히 감사하겠습니다.

답변1

zsh자체 일괄 이름 변경 도구가 내장되어 있으며 zmv자동 로드 기능으로 사용할 수 있습니다.

autoload -Uz zmv
typeset -A map=(F 1 R 2)
zmv -n '(<->)([FR])(.fastq.gz)' '${1}_S${1}_L001_R$map[$2]_001$3'

( -n만족할 경우 제거(모의 실행)).

또는 스칼라를 사용 map=FR하고 해당 문자열의 문자 인덱스로 바꿉니다.

map=FR
zmv -n "(<->)([$map])(.fastq.gz)" '${1}_S${1}_L001_R$map[(Ie)$2]_001$3'

답변2

그리고펄의 rename명령줄, 변수 부분( (...))을 캡처하고 역참조( $1)를 사용할 수 있습니다.

rename -n 's/(\d+)F\.fastq/$1_S$1_L001_R1_001.fastq/' *F.fastq.gz
rename -n 's/(\d+)R\.fastq/$1_S$1_L001_R2_001.fastq/' *R.fastq.gz

-n출력이 만족스러우면 삭제하세요.

관련 정보