문자나 문자열을 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

문자나 문자열을 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

내 후속 조치로이전 질문, 다음 형식의 파일이 여러 개 있는 경우

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}$varsearchreplace${file/ras./}$fileras.ras..

답변2

또 다른 옵션은 mmv(Mass MoVe 및 이름 바꾸기)를 사용하는 것입니다.

mmv '*ras.*' '#1#2'

패턴 주위에 작은따옴표를 사용하는 것을 잊지 마십시오. 그렇지 않으면 별이 쉘 수준에서 확장됩니다.

이 유틸리티를 항상 사용할 수 있는 것은 아니지만, 그렇지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다.

sudo apt-get install mmv

매뉴얼 페이지를 참조하세요여기.

답변3

POSIX 호환 셸( bash, dashksh)에서:

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

https://stackoverflow.com/questions/4793892/recursively-rename-files-using-find-and-sed#comment60553396_11709995

관련 정보