내 후속 조치로이전 질문, 다음 형식의 파일이 여러 개 있는 경우
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.
파일 중간에 있는 모든 내용을 삭제하려면 어떤 명령을 사용할 수 있나요 ?
답변1
이전 질문에 대한 답변을 약간 수정하면 됩니다.
rename s/ras\.// sw.ras.*
또는
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
설명하다:
rename
정규식과 파일 목록을 perl
가져와서 각 파일 이름에 정규식을 차례로 적용하고, 정규식을 적용한 결과로 각 파일의 이름을 바꾸는 스크립트 입니다 . perl
우리의 경우 ras
리터럴과 일치하고 \.
리터럴과 일치합니다 .
( .
개행 문자를 제외한 모든 문자를 의미함). 이는 아무것도 대체하지 않습니다.
이 루프는 (표준 쉘 glob)로 시작하는 for
모든 파일을 가져와 이를 통해 반복합니다. 첫 번째 일치 항목을 검색하여 로 바꾸므로 첫 번째 일치 항목이 반환되고 제거됩니다. 따라서 이 명령은 파일 이름을 동일한 이름에서 빼기로 바꿉니다. 이 검색 및 바꾸기를 사용하면 문자가 특수 문자가 아닌 문자 그대로 이해됩니다.sw.ras.
${var/search/replace}
$var
search
replace
${file/ras./}
$file
ras.
ras.
.
답변2
또 다른 옵션은 mmv(Mass MoVe 및 이름 바꾸기)를 사용하는 것입니다.
mmv '*ras.*' '#1#2'
패턴 주위에 작은따옴표를 사용하는 것을 잊지 마십시오. 그렇지 않으면 별이 쉘 수준에서 확장됩니다.
이 유틸리티를 항상 사용할 수 있는 것은 아니지만, 그렇지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다.
sudo apt-get install mmv
매뉴얼 페이지를 참조하세요여기.
답변3
POSIX 호환 셸( bash
, dash
등 ksh
)에서:
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
또는 다음을 사용하여 rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
답변4
find, xargs 및 sed를 사용하십시오.
find -name 'sw.ras.*' -print0 | sed -ze "p;s/\.ras//" | xargs -0 -n2 mv