이미지가 가득한 디렉토리가 있습니다.
image0001.png
image0002.png
image0003.png
...
그리고 하나의 라이너로 이름을 바꾸고 싶습니다 (예 :).
0001.png
0002.png
0003.png
...
어떻게해야합니까?
thunar -B *.png
thunar의 대량 이름 바꾸기 GUI 도구 보다 훨씬 쉬워지지 않습니다 .
이미지가 가득한 디렉토리가 있습니다.
image0001.png
image0002.png
image0003.png
...
그리고 하나의 라이너로 이름을 바꾸고 싶습니다 (예 :).
0001.png
0002.png
0003.png
...
어떻게해야합니까?
thunar -B *.png
thunar의 대량 이름 바꾸기 GUI 도구 보다 훨씬 쉬워지지 않습니다 .
답변:
Bash 또는 기타 POSIX 호환 쉘을 사용하는 경우 :
for f in *.png; do
mv -- "$f" "${f#image}"
done
데비안과 파생물에서 Perl의 rename
작업은 다음과 유사합니다 sed
.
rename -v 's/image//' *.png
대신 다음과 같이 작동 하는 rename
from 도 있습니다 util-linux
.
rename image '' *.png
rename
프로그램은 Perl 예제 배포본에서 나온 것입니다. 데비안과 우분투는로 배송됩니다 /usr/bin/rename
. 다른 유닉스 변종은 그것을 제공하지 않거나 완전히 다른 것을 제공 할 수 있습니다 /usr/bin/rename
.
rename
걸릴 a를 에서 로 교체 패턴 :rename [options] <expression> <replacement> <file>...
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
타겟 패턴은 소스 패턴 와일드 일치대로 치환 될 것이다. 이것은 여러 와일드 카드에서도 작동하며 파일 이름의 일부 순서를 변경하는 데 사용할 수 있습니다. 소문자를 대문자로 변환하는 것과 같이보다 복잡한 작업을 쉽게 수행 할 수도 있습니다.
인용하여 쉘에서 패턴을 보호하십시오.
나는 Perl을 좋아한다.
perl -nlE '$old=$_; s/image//; qx(mv $old $_)'
파일을 다른 디렉토리에 복사하는 것과 같은 다른 작업에 동일한 패턴을 사용할 수도 있습니다.
perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
rename($old,$_)
명령 qmv
은 renameutils
탭으로 구분 된 두 개의 열이있는 파일 이름 목록을 표시하는 편집기를 엽니 다. 각 행은 파일 이름 중 하나를 표시하며 두 열에서 동일합니다. 오른쪽 열은 파일의 새 이름을 나타냅니다.
변경하려면 오른쪽의 이름을 편집하십시오. 이 예에서, :%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
)
image * png 파일을 쉽게 선택하고 파일 이름에서 줄 바꿈을 처리 할 필요가 없다고 가정
find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done
안전하고 공백, 줄 바꿈, 백 슬래시 및 기타 사항을 처리 할 수 있습니다 .
find . -name "image*.png" | while IFS= read -r f; do
mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )";
done
내용은 Windows 및 Linux ,이 펄 스크립트는 할 것입니다; 이 경우 :
$ rnm -l 's/^image//' '*.png'
스크립트는 디렉토리에서 재귀 적으로 실행될 수 있으며 모든 디렉토리 에 카운트를 추가 할 수도 있습니다.
$ rnm -r 's/^/$counter./' '/\.png$/'
UTF-8 문자도 Windows와 Linux 모두에서 올바르게 처리됩니다.
정규식 (Windows, Linux 및 OS X 지원)을 통해 파일 / 디렉토리의 이름을 안전하게 일괄 변경하기위한 실용적인 크로스 플랫폼 명령 줄 도구 인 brename ( https://github.com/shenwei356/brename )을 사용해보십시오 .
@patrickDurusau 는 다음과 같이 말했습니다.
Linux에는 다양한 배치 파일 이름 변경 옵션이 있지만 필자의 이름이 부족하다는 단점은 보지 못했습니다.
풍모:
find ./ -name "*.html" -exec CMD
.명령:
$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed
ls * png | 읽는 동안 -rf; f2 = "`echo $ f | sed -e 's / image // '`"; mv $ f $ f2; 끝난
ls
것은 단지 문제를 요구합니다. read
이어야합니다 read -r
. 모든 변수 대체는 큰 따옴표 안에 있어야합니다.