문자 나 문자열을 제거하여 여러 파일의 이름을 바꾸려면 어떻게해야합니까? 양식의 파일이 여러 개인

이전 질문에 대한 후속 조치로 양식의 파일이 여러 개인 경우

sw.ras.001
sw.ras.002
sw.ras.003
…

ras.모든 파일의 중간에서 를 제거하기 위해 어떤 명령을 사용할 수 있습니까?



답변

마지막 질문의 답변 중 하나를 약간 수정 하여이 작업을 수행 할 수 있습니다.

rename s/ras\.// sw.ras.*

또는

for file in sw.ras.*; do
    mv "$file" "${file/ras./}"
done

설명:

renameA는 perl소요 스크립트 perl, 정규 표현식 및 파일의 목록을 차례로 각 파일의 이름에 정규식을 적용하고, 정규식을 적용한 결과에 각 파일의 이름을 변경가. 우리의 경우, ras문자 그대로 \.일치하고 문자 그대로 .( .개행 문자 이외의 다른 문자를 나타냄) 와 일치하며 , 아무것도 대체하지 않습니다.

for루프는 모든 시작 파일을 소요 sw.ras.그들을 (표준 쉘 글로브)와 루프를. ${var/search/replace}검색 $var을위한 search대체합니다 가진 첫번째 발생 replace하므로, ${file/ras./}반환 $file처음에 ras.제거. 따라서 명령은 파일 이름을 빼기 같은 이름으로 바꿉니다 ras.. 이 검색 및 바꾸기와 함께 .특수 문자가 아닌 문자 그대로 사용됩니다.


답변

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

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

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

이 유틸리티는 항상 사용 가능한 것은 아니지만 사용할 수없는 경우 다음을 사용하여 설치할 수 있습니다.

sudo apt-get install mmv

맨 페이지를 참조 하십시오 .


답변

모든 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:]]


답변

나는 최근에 파일 이름에서 문자가 여러 번 발생한 마지막 문자를 대체 해야하는 여러 파일의 대량 이름 바꾸기를 수행해야했습니다. 이 특별한 경우에는 마지막 대시 -를 밑줄 로 바꿔야합니다 _.

some-long-file-name.ext

이것으로 :

some-long-file_name.ext

시간이 좀 걸렸지 만 마침내 그렇게했습니다.

for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done

이리:

  • ${i%-*} 파일 이름의 시작 부분을 대시의 마지막 항목까지 일치시킵니다. -
  • ${file##*-} 마지막으로 대시 발생 후 나머지 파일 이름과 일치합니다. -

답변