Bash에서 잘못된 시작 및 끝 문자가 있는 파일 이름 수정 및 일괄 이름 바꾸기

Bash에서 잘못된 시작 및 끝 문자가 있는 파일 이름 수정 및 일괄 이름 바꾸기

(이전) 첫 번째 문자와 마지막 문자를 제거하여 많은 파일의 이름을 바꿔야 합니다 .ext.

오류>

'1st moto ride [Aug '99]'.mp4
'Samuel' Song'.mp3
'Plane Landing'.avi
'"Ode" (sort of) to the Sun'.pdf
'The Divine Comedy [1308, Alighieri D.]'.txt
'100 ways to jump off the Moon'.wav
'[1979] Ста́лкер'.mkv

오른쪽>

1st moto ride [Aug '99].mp4
Samuel' Song.mp3
Plane Landing.avi
"Ode" (sort of) to the Sun.pdf
The Divine Comedy [1308, Alighieri D.].txt
100 ways to jump off the Moon.wav
[1979] Ста́лкер.mkv

감사해요

답변1

해당 작은따옴표가 설명할 수 없는 ls인공물이 아니라 실제로 파일 이름의 일부라고 가정합니다.

또한 (p)rename(perl 유틸리티)이 설치되어 있다고 가정합니다.

ls
''\''1st moto ride [Aug '\''99]'\''.mp4'
rename "s/^'//;s/'\.(.*)$/.\$1/" *
ls
'1st moto ride [Aug '\''99].mp4'

이 출력에서 ​​두 번째 출력의 파일 이름 주위에 있는 작은따옴표는 ls실제로 ls인공물입니다.

도구 및 표현식에 대한 설명 텍스트입니다.

Perl 정규 표현식을 사용합니다. for 역참조를 제외하고 구문은 s///기본적으로 in과 동일합니다. 구분된 경우 한 줄에 여러 표현식을 사용할 수 있습니다.sed$1;

즉, 선행을 검색 '하고 아무것도 없는 것으로 바꿉니다. 그런 다음 '앞의 a 리터럴을 검색하고 ., a 뒤의 모든 항목을 캡처하고 ., .a 및 캡처된 부분과 일치하는 모든 항목을 바꿉니다.

일반적으로 나는 작은 따옴표를 사용하여 Perl RE를 래핑하지만 작은 따옴표를 대체하려고 시도하고 있기 때문에(그리고 매우 보기 흉한 이스케이프를 시도하고 있으므로) 큰 따옴표를 사용하고 있습니다. 이는 $1교체 부분에서 이스케이프 해야 함을 의미합니다 . 그렇지 않으면 누락된 bash 변수에서 빈 문자열이 됩니다.

관련 정보