파일 이름에서 문자/문자를 제거하는 방법

파일 이름에서 문자/문자를 제거하는 방법

다음과 같은 문자를 제거하기 위해 파일 이름 배치를 변경하고 싶습니다.

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후행 제거 .(파일 확장자 앞)

관련 정보