배치 이름 바꾸기 파일 하나의 라이너로 이름을 바꾸고 싶습니다

이미지가 가득한 디렉토리가 있습니다.

image0001.png
image0002.png
image0003.png
...

그리고 하나의 라이너로 이름을 바꾸고 싶습니다 (예 :).

0001.png
0002.png
0003.png
...

어떻게해야합니까?



답변

Bash 또는 기타 POSIX 호환 쉘을 사용하는 경우 :

for f in *.png; do
    mv -- "$f" "${f#image}"
done


답변

데비안과 파생물에서 Perl의 rename작업은 다음과 유사합니다 sed.

  rename -v 's/image//' *.png

대신 다음과 같이 작동 하는 renamefrom 도 있습니다 util-linux.

  rename image '' *.png


답변

zmv

zsh 쉘에는 강력한 배치 이름 바꾸기 명령이 zmv있습니다.

먼저 zmv다음과 같이 명령 을 활성화해야 합니다 (이것은로 갈 수 있습니다 ~/.zshrc).

autoload zmv

기본 구문은 zmv PATTERN REPLACEMENT입니다. 패턴은 쉘 글로브 표현식입니다. 패턴의 일부는 괄호로 묶을 수 있습니다. 대체 텍스트가 포함 할 수있는 $1, $2패턴의 N 번째 괄호에 그룹 등 참조. 예를 들면 다음과 같습니다.

zmv 'image(*.png)' '$1'

또한 자동으로 정의 zsh을 요청할 수 있습니다 $1, $2패턴에 와일드 카드 문자를 일치 등 :

zmv -w 'image*.png' '$1.png'


답변

나는 일반적 으로이 유스 케이스에 nice and simple mmv ( man page ) 유틸리티를 사용합니다.

$ mmv "image*.png" "#1.png"

당신의 작업을 수행합니다.

그만큼 #1타겟 패턴은 소스 패턴 와일드 일치대로 치환 될 것이다. 이것은 여러 와일드 카드에서도 작동하며 파일 이름의 일부 순서를 변경하는 데 사용할 수 있습니다. 소문자를 대문자로 변환하는 것과 같이보다 복잡한 작업을 쉽게 수행 할 수도 있습니다.

인용하여 쉘에서 패턴을 보호하십시오.


답변

POSIX sh for 루프

sed를 사용하여 이름 바꾸기

for i in image*jpg
do
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done


답변

나는 Perl을 좋아한다.

perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

파일을 다른 디렉토리에 복사하는 것과 같은 다른 작업에 동일한 패턴을 사용할 수도 있습니다.

perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'


답변

qmv

명령 qmvrenameutils탭으로 구분 된 두 개의 열이있는 파일 이름 목록을 표시하는 편집기를 엽니 다. 각 행은 파일 이름 중 하나를 표시하며 두 열에서 동일합니다. 오른쪽 열은 파일의 새 이름을 나타냅니다.
변경하려면 오른쪽의 이름을 편집하십시오. 이 예에서, :%s/...또는 시각적 차단 모드가 도움이됩니다.

편집기의 파일 이름

$ qmv *.png

에디터에서 :

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png
~
~
~
~
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

오른쪽 열의 이름 편집 :
( image비주얼 블록 모드를 사용하여 모든 줄 에서 접두사 제거 )

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png
~
~
~
~
:wq

이름 변경 로그 :

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(예를 들어 우분투 : apt-get install renameutils)