생성하기 위해 마지막에 파일 이름에 xyz_123_foo.ext
추가하고 싶은 유사한 파일이 많이 있습니다 . -bar
xyz_123_foo-bar.ext
rename . -bar. xyz_*
결과 :
rename: invalid option -- 'b'
다음은 사용법 텍스트입니다. 그런 다음 다양한 변형을 시도했지만 성공 '-bar'
하지 못했습니다 "-bar"
.
rename
이것을 -
대체 문자열의 일부로 어떻게 받아들일 수 있습니까 ?
아니면 다른 명령이 더 효율적이거나 적절할까요?
내 쉘은 bash이고 SuSe Linux SLE12에서 쉘을 rename
사용 하고 있습니다.util-linux
답변1
mmv
이와 같은 작업에 적합합니다.
mmv -n -- '*.ext' '#1-bar.ext'
또는 포인트 확장
mmv -n -- '*.*' '#1-bar.#2'
-n
올바른 일을 하고 있다고 생각되면 제거하세요.
답변2
rename
이 유틸리티의 Perl 변형이 있다고 가정합니다 rename
.
rename 's/$/-bak/' xyz_*
이는 Perl 표현식을 사용하여 -bak
대체("줄 끝" 앵커)를 통해 주어진 모든 파일 이름 끝에 간단히 삽입합니다.$
당신은 또한 사용할 수 있습니다
rename '$_ .= "-bak"' xyz_*
다른 Perl 표현식을 사용하여 문자열을 (Perl의 "현재 항목", 이 경우 파일 이름) -bak
에 추가합니다.$_
쉘 루프 솔루션의 경우:
for name in xyz_*; do
mv -i "$name" "$name-bak"
done
답변3
( from rename
대신 ) PERL 확장에 대해 이야기하고 있다고 가정하면 ...rename
util-linux
rename 's/.ext/-bar.ext/' xyz_123_foo.ext
결과적으로 파일명은 xyz_123_foo-bar.ext
.
작은따옴표 안의 부분은 PERL 정규식입니다. 파일 이름 s
을 로 바꾸십시오. 파일이 홈 디렉토리( )에 있다고 가정하면 이를 와 결합할 수 있습니다..ext
-bar.ext
find
~
find ~ -type f -name '*.ext' -exec rename 's/.ext/-bar.ext/' {} +
답변4
대부분의 Linux 배포판에 사전 설치된 util-linux
버전을 사용하는 경우 앞에 대시를 추가하여 매개변수를 이스케이프할 수 있습니다. 이것이 기본 동작입니다.rename
--
getopt
rename '.' -- '-bar.' xyz_*