표현식 사용 | 선행 "-"(하이픈 | 빼기 기호) "이름 바꾸기"로 바꾸기

표현식 사용 | 선행 "-"(하이픈 | 빼기 기호) "이름 바꾸기"로 바꾸기

생성하기 위해 마지막에 파일 이름에 xyz_123_foo.ext추가하고 싶은 유사한 파일이 많이 있습니다 . -barxyz_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 확장에 대해 이야기하고 있다고 가정하면 ...renameutil-linux

rename 's/.ext/-bar.ext/' xyz_123_foo.ext

결과적으로 파일명은 xyz_123_foo-bar.ext.

작은따옴표 안의 부분은 PERL 정규식입니다. 파일 이름 s을 로 바꾸십시오. 파일이 홈 디렉토리( )에 있다고 가정하면 이를 와 결합할 수 있습니다..ext-bar.extfind~

find ~ -type f -name '*.ext' -exec rename 's/.ext/-bar.ext/' {} +

답변4

대부분의 Linux 배포판에 사전 설치된 util-linux버전을 사용하는 경우 앞에 대시를 추가하여 매개변수를 이스케이프할 수 있습니다. 이것이 기본 동작입니다.rename--getopt

rename '.' -- '-bar.' xyz_*

관련 정보