다음과 같은 문자를 제거하기 위해 파일 이름 배치를 변경하고 싶습니다.
Stain-A_1P.fastq to Strain-A_1.fastq
Strain-A_2P.fastq to Strain-A_2.fastq
나는 다음을 시도했습니다 :
rename 's/P//' *fastq
for file in *; do mv "$file" `echo $file | tr 'P' ''` ; done
답변1
bash
또는 기타 POSIX 쉘을 사용하십시오 .
for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
for f in *.fastq
반복.fastq
파일ext="${f##*.}"
(${f##*.}
)을 가져와 파일 확장자를 변수로 저장합니다.ext
${f%?.*}
마지막 문자 뒤의 문자 부분을 가져옵니다..
mv "$f" "${f%?.*}.${ext}"
이름 바꾸기 작업을 수행하고 잘린 접두사와 함께 확장명을 추가합니다.
echo
이것은 실제 작업 에 대한 미리보기입니다 .
for f in *.fastq; do ext="${f##*.}"; mv -- "$f" "${f%?.*}.${ext}"; done
당신이 가지고 있다면 rename
( prename
):
rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
.*
마지막 부분을 일치시키기 위해 탐욕스러운 일치를 사용합니다..
캡처된 첫 번째 그룹에는 끝에서 두 번째 문자까지의 부분이 포함됩니다.
.
두 번째 캡처 그룹에는 마지막 캡처 그룹 이후의 부분이 포함됩니다
.
(포함.
).
-n
실용적인 행동을 버리세요 :
rename 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
예:
% ls -1d -- *.fastq
Stain-A_1P.fastq
Strain-A_2P.fastq
% for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
mv -- Stain-A_1P.fastq Stain-A_1.fastq
mv -- Strain-A_2P.fastq Strain-A_2.fastq
% rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
rename(./Stain-A_1P.fastq, ./Stain-A_1.fastq)
rename(./Strain-A_2P.fastq, ./Strain-A_2.fastq)
답변2
사용 rename
명령:
for f in *.fastq; do rename 's/P\./\./' "$f" ; done
's/P\./\./
-진주표현식 바꾸기:P
후행 제거.
(파일 확장자 앞)