답변:
마지막 질문의 답변 중 하나를 약간 수정 하여이 작업을 수행 할 수 있습니다.
rename s/ras\.// sw.ras.*
또는
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
설명:
rename
A는 perl
소요 스크립트 perl
, 정규 표현식 및 파일의 목록을 차례로 각 파일의 이름에 정규식을 적용하고, 정규식을 적용한 결과에 각 파일의 이름을 변경가. 우리의 경우, ras
문자 그대로 \.
일치하고 문자 그대로 .
( .
개행 문자 이외의 다른 문자를 나타냄) 와 일치하며 , 아무것도 대체하지 않습니다.
for
루프는 모든 시작 파일을 소요 sw.ras.
그들을 (표준 쉘 글로브)와 루프를. ${var/search/replace}
검색 $var
을위한 search
대체합니다 가진 첫번째 발생 replace
하므로, ${file/ras./}
반환 $file
처음에 ras.
제거. 따라서 명령은 파일 이름을 빼기 같은 이름으로 바꿉니다 ras.
. 이 검색 및 바꾸기와 함께 .
특수 문자가 아닌 문자 그대로 사용됩니다.
나는 최근에 파일 이름에서 문자가 여러 번 발생한 마지막 문자를 대체 해야하는 여러 파일의 대량 이름 바꾸기를 수행해야했습니다. 이 특별한 경우에는 마지막 대시 -
를 밑줄 로 바꿔야합니다 _
.
some-long-file-name.ext
이것으로 :
some-long-file_name.ext
시간이 좀 걸렸지 만 마침내 그렇게했습니다.
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
이리:
${i%-*}
파일 이름의 시작 부분을 대시의 마지막 항목까지 일치시킵니다. -
${file##*-}
마지막으로 대시 발생 후 나머지 파일 이름과 일치합니다. -
ras
, 즉와 끝까지sw..001
, 또는ras.
, 떠나sw.001
?