(이전) 첫 번째 문자와 마지막 문자를 제거하여 많은 파일의 이름을 바꿔야 합니다 .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 변수에서 빈 문자열이 됩니다.