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


21

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

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

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


제거 하시겠습니까 에만ras , 즉와 끝까지 sw..001, 또는 ras., 떠나 sw.001?
Kevin

아마도 'ras'를 제거하고 싶을 것입니다. 명령이 매우 다릅니 까?
Paul

아니요, \.패턴에 포함 여부 만 있습니다.
Kevin

답변:


35

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

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.. 이 검색 및 바꾸기와 함께 .특수 문자가 아닌 문자 그대로 사용됩니다.


배우는 다른 사람들에게 당신의 대답을 설명해 주시겠습니까? "s / ras \ .// sw.ras. *"는 무엇을합니까? 나는 그것을 알고 있다고 생각하지만 확신하고 싶습니다. 다른 사람들도 배울 수 있습니다. 두 번째 옵션은 같은 방법입니다.
H_7

1
@ H_7 좋은 생각입니다. 설명을 추가했습니다.
Kevin

14

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

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

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

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

sudo apt-get install mmv

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


1
훌륭한 도구입니다 !!!
Christian

5

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

1

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

some-long-file-name.ext

이것으로 :

some-long-file_name.ext

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

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

이리:

  • ${i%-*} 파일 이름의 시작 부분을 대시의 마지막 항목까지 일치시킵니다. -
  • ${file##*-} 마지막으로 대시 발생 후 나머지 파일 이름과 일치합니다. -
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.