정규식을 사용하여 많은 파일의 이름을 바꾸려면 어떻게해야합니까?


20

Mac OS X (10.7.2)에서 많은 파일의 이름을 바꾸고 싶습니다 rename. 명령에 대한 perl 패키지가 없습니다 .

파일 이름이 "T452-102456-0.png"와 같고 "-0"부분을 삭제하고 싶습니다. 내 자신의 php-cli 스크립트를 작성 하여이 작업을 수행 할 수 있다는 것을 알고 있지만 더 쉽고 빠른 해결책을 알고 싶습니다.


"많은 pdf 파일"과 "내 파일의 이름이"T452-102456-0.png "와 같은 논리적 모순이 있습니까?
manatwork

아 ... 파일 형식은 중요하지 않지만 사실입니다 ^^. 편집, 의견 주셔서 감사합니다 =)
Raphaël

답변:


21

Bash 또는 Ksh가 함께 mv해결할 수 있습니다.

for f in *.png; do mv -n "$f" "${f/-0}"; done

첫 번째 대시 이후에도 파일 이름에 "0"이 있고 "-0"이 항상 점 앞에있는 경우 해당 점도 표현식에 포함 시키려고 할 수 있습니다.

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

그러나 이름 바꾸기 규칙이 간단하기 rename때문에 util-linux 패키지 를 가지고 있다면 그렇게 할 것입니다.

rename '-0.' '.' *.png

완벽하게 작동합니다. 대단히 감사합니다 =)
Raphaël

3

간단한 방법 : 현재 디렉토리의 파일 만

zsh로 :

autoload zmv
zmv '(*)-0(.png)' '$1$2'

다른 껍질로 :

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


개선 된 방법 : 현재 디렉토리 및 / 또는 하위 디렉토리의 파일

zsh로 :

zmv '(**/)(*)-0(.png)' '$1$2$3'

ksh93으로 :

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

위와 같이 bash ≥4이면 명령 shopt -s globstar대신 사용 하십시오 set.

다른 껍질로 :

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

zsh를 설치하는 또 다른 좋은 이유 :) .... zmv
danidee


0

mmv패키지 가있는 경우 :

mmv '*-0.png' '#1.png'

(최근 버전)과 마찬가지로 rename기존 파일을 덮어 쓰지 않도록주의를 기울여야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.