정규식을 사용하여 많은 수의 파일 이름을 바꾸는 방법은 무엇입니까?

정규식을 사용하여 많은 수의 파일 이름을 바꾸는 방법은 무엇입니까?

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

내 파일 이름은 "T452-102456-0.png"와 같으며 "-0" 부분을 제거하고 싶습니다. 나는 내 자신의 php-cli 스크립트를 작성하여 이 작업을 수행할 수 있다는 것을 알고 있지만 더 간단하고 빠른 솔루션을 알고 싶습니다.

답변1

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과 같이 시작 하면유틸리티Linux패키지에서는 다음과 같이 할 수도 있습니다.

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

답변2

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

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대신 command 를 사용하십시오 set.

다른 쉘의 경우:

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

답변3

OSX의 Fish Shell에서:

for f in *.png; mv -n $f (basename $f -0.png).png; end

생선 껍질:https://fishshell.com/

답변4

다음 mmv패키지가 있는 경우:

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

(최신 버전)과 마찬가지로 rename기존 파일을 덮어쓰지 않도록 합리적인 조치를 취합니다.

관련 정보