파일 접미사를 변경하는 방법

파일 접미사를 변경하는 방법

여러 하위 폴더와 파일이 포함된 디렉터리 구조에서 일부 파일 이름에는 접미사 _create(예: java1_create)가 있고 일부 파일 이름에는 _bak( java2_bak)가 있습니다.

모든 파일에 접미사가 붙도록 _create파일 이름을 접미사로 변경하기 만 하면 됩니다 ._bak_bak

이를 수행하는 명령이나 스크립트가 있습니까?

답변1

Linux에서는 _create파일 이름에 아무 것도 없다고 가정하면(끝에만) rename모든 비임베디드 Linux 시스템에 설치된 util-linux 패키지의 유틸리티를 사용할 수 있습니다. 호출은 find하위 디렉터리의 모든 파일에 대해 명령을 반복적으로 실행합니다.

find -depth -exec rename _create _bak {} +

Debian 및 파생 배포판(Ubuntu, Mint 등)에서 Perl 스크립트는 로 제공되거나 , 대신 rename호출되거나 , 로 대체될 수 있습니다 .rename.ulrenamerename _create _bakrename 's/_create$/_bak/'

답변2

이것이 당신이 추구하는 것일 수 있습니다:

for file in $(find . -name "*_create"); do mv -i $file ${file%%_create}_bak; done

실제 파일에 사용하기 전에 반드시 테스트해 보세요.

답변3

Debian, Ubuntu 및 그 파생 제품에서는 Perl이 사용되며 rename때로는 다음과 같이 설치됩니다 prename.

#enable ** globbing
shopt -s globstar 
#use the rename utility
rename -n 's/_create$/_bak/' **_create 

예상대로 작동하면 -n(=) 플래그를 제거하십시오.--no-act


노트:

이는 아마도 이 작업을 수행하는 가장 짧고 효율적인 방법일 것입니다. 특히 이미 shotp -s globstar(mine ~/.bashrc)을 사용하고 있는 경우에는 더욱 그렇습니다.

그러나 다음을 얻을 수 있습니다.

-bash: /usr/bin/rename: Argument list too long

**_create확장자가 getconf ARG_MAX문자 길이(Linux 시스템에서는 2097152)를 초과하는 경우 .

find -print0이 경우 다음 과 함께 사용해야 합니다 xargs -0(참조lcd047의 답변).

관련 정보