Linux에서 rename 명령을 사용하는 방법

Linux 세계에서 가장 강력한 파일 이름을 바꾸는 파일을 파악 mv하고 휴식을 취하십시오. Rename유연하고 빠르며 때로는 더 쉽습니다. 이 강력한 명령에 대한 자습서가 있습니다.

mv에 무슨 문제가 있습니까?

에는 아무런 문제가 없습니다 mv. 이 명령은 잘 작동하며 모든 Linux 배포, macOS 및 기타 Unix 유사 운영 체제에서 찾을 수 있습니다. 따라서 항상 사용할 수 있습니다. 그러나 때로는 삽이 아닌 불도저가 필요합니다.

mv명령은 삶의 목적이 있으며 파일을 이동하는 것입니다. 기존 파일 새 이름으로 새 파일 이동하는 데 사용할 수 있다는 것은 행복한 부작용 입니다. 최종 효과는 파일 이름을 바꾸는 것이므로 원하는 것을 얻을 수 있습니다. 그러나 mv전용 파일 이름 변경 도구는 아닙니다.

mv로 단일 파일 이름 바꾸기

mv파일 유형 mv, 공백, 파일 이름, 공백 및 파일에 포함 할 새 이름의 이름 을 바꾸는 데 사용 합니다 . 그런 다음 Enter를 누르십시오.

ls파일 이름이 변경되었는지 확인하는 데 사용할 수 있습니다  .

mv oldfile.txt newfile.txt
ls * .txt

mv로 여러 파일 이름 바꾸기

여러 파일의 이름을 바꾸고 싶을 때 상황이 더 까다로워집니다. mv여러 파일의 이름을 바꿀 수 없습니다. 멋진 Bash 트릭을 사용해야합니다. 중간 수준의 명령 줄 기능을 알고 있다면 괜찮지 만 여러 파일의 이름을 바꾸는 복잡성은 단일 파일의 이름을 바꾸는 데 mv사용 mv하기 쉬운 것과는 완전히 대조 됩니다.

상황이 빠르게 확대됩니다.

다양한 유형의 다양한 파일이있는 디렉토리가 있다고 가정 해 보겠습니다. 이러한 파일 중 일부는 ".prog"확장자를 갖습니다. ".prg"확장자를 갖도록 명령 줄에서 이름을 바꾸려고합니다.

우리는 우리를 위해 그것을 어떻게할까요 mv? 파일을 살펴 보겠습니다.

ls * .prog -l

실제 Bash 스크립트 파일 작성에 의존하지 않는 한 가지 방법이 있습니다.

* .prog에서 f의 경우; do mv- "$ f" "$ {f % .prog} .prg"

그 일을 했습니까? 파일을 확인하고 보자.

ls * .pr *

네, 작동했습니다. 이제 모두 ".prg"파일이며 디렉토리에 ".prog"파일이 없습니다.

방금 무슨 일이 있었나요?

그 긴 명령은 실제로 무엇을 했습니까? 그것을 분해합시다.

* .prog에서 f의 경우; do mv- "$ f" "$ {f % .prog} .prg"

첫 번째 부분은 디렉토리에있는 각 ".prog"파일을 차례로 처리 할 루프를 시작합니다.

다음 부분에서는 처리가 수행작업에 대해 설명 합니다. mv각 파일을 새 파일로 이동 하는 데 사용  됩니다. 새 파일은“.prog”부분을 제외한 원본 파일의 이름으로 이름이 지정됩니다. 대신 ".prg"의 새 확장자가 사용됩니다.

더 간단한 방법이 있어야합니다

확실히. 그것은이다 rename명령.

rename표준 Linux 배포판의 일부가 아니므로 설치해야합니다. 또한 Linux 제품군마다 이름이 다르지만 모두 동일한 방식으로 작동합니다. 사용중인 Linux 버전에 따라 적절한 명령 이름을 바꾸면됩니다.

Ubuntu 및 Debian 파생 배포에서 다음 rename과 같이 설치 합니다.

sudo apt-get 설치 이름 바꾸기

Fedora 및 RedHat 파생 배포판에서는 이와 prename같이 설치 합니다. Perl을 나타내는 이니셜 "p"에 유의하십시오.

sudo dnf 설치 사전 이름

Manjaro Linux에 설치하려면 다음 명령을 사용하십시오. 이름 바꾸기 명령은라고 perl-rename합니다.

sudo pacman -Syu perl-rename

다시 해보자

그리고 이번에는 rename. ".prog"파일 세트를 갖도록 시계를 롤백합니다.

ls * .prog

이제 다음 명령을 사용하여 이름을 변경해 보겠습니다. 그런 다음 ls작동하는지 확인 합니다. renameUbuntu 또는 Debian 파생 Linux를 사용하지 않는 경우 Linux에 적합한 명령 이름 으로 대체해야합니다 .

's / .prog / .prg /'* .prog 이름 바꾸기
ls * .pr *

작동했습니다. 이제 모든 ".prg"파일이며 디렉토리에 ".prog"파일이 남아 있지 않습니다.

이 시간에 무슨 일이 일어 났습니까?

그 마법을 세 부분으로 설명해 봅시다.

번째 부분은 명령 이름 rename(또는 다른 배포의 경우 prename또는 perl-rename)입니다.

마지막 부분은 *.prog알려줍니다, rename모든 ".prog"파일에서 작동 할 수 있습니다.

중간 부분은 우리가 원하는 작업을 각 파일 이름을 수행 할 수 정의합니다. s수단의 대체. 첫 번째 용어 ( .prog)는 rename각 파일 이름에서 검색되는 항목이고 두 번째 용어 ( .prg)는 대체 될 항목입니다.

명령의 중간 부분 또는 중심 표현은 Perl '정규 표현'이며 rename명령에 유연성을 부여하는 것입니다.

파일 이름의 다른 부분 변경

지금까지 파일 이름 확장자를 변경 했으므로 파일 이름의 다른 부분을 수정하겠습니다.

디렉토리에는 많은 C 소스 코드 파일이 있습니다. 모든 파일 이름은 "slang_"로 시작됩니다. 우리는 이것을 ls.

ls sl * .c

모든 "slang_"항목을 "sl_"로 바꾸겠습니다. 명령의 형식은 이미 우리에게 익숙합니다. 검색어, 대체 용어 및 파일 유형 만 변경합니다.

's / slang_ / sl_'* .c 이름 바꾸기

이번에는“.c”파일을 찾고“slang_”을 검색합니다. 파일 이름에서 "slang_"이 발견 될 때마다 "sl_"로 대체됩니다.

ls동일한 매개 변수로 위 의 명령을 반복하여 해당 명령의 결과를 확인할 수 있습니다 .

ls sl * .c

파일 이름의 일부 삭제

검색어를 아무것도 입력하지 않으면 파일 이름의 일부를 제거 할 수 있습니다.

ls * .c
's / sl _ //'* .c 이름 바꾸기
ls * .c

우리는에서 볼 수있는 ls우리의 "가 .c"파일이 모두 "sl_"앞에 추가되는 명령. 그것을 모두 제거합시다.

rename명령은 이전과 같은 형식을 따른다. 우리는 ".c"파일을 찾을 것입니다. 검색 용어는 "sl_"이지만 대체 용어가 없습니다. 사이에 아무것도없는 두 개의 백 슬래시는 아무것도 의미하지 않습니다. 빈 문자열입니다.

rename각 ".c"파일을 차례로 처리합니다. 파일 이름에서 "sl_"을 검색합니다. 발견되면 아무것도 대체되지 않습니다. 즉, 검색어가 삭제됩니다.

두 번째 ls명령을 사용하면 모든 ".c"파일에서 "sl_"접두사가 제거되었음을 확인할 수 있습니다.

파일 이름의 특정 부분에 대한 변경 제한

ls 파일 이름에 "param"문자열이있는 파일을 살펴 보겠습니다 . 그런 다음 rename이 문자열을 "parameter"문자열로 바꾸는 데 사용 합니다. 명령이 해당 파일에 ls미치는 영향을 확인하기 위해 다시 한 번 사용하겠습니다 rename.

ls * 매개 변수 *
's / param / parameter'* .c 이름 바꾸기
ls * 매개 변수 *

파일 이름에 "param"이있는 4 개의 파일이 있습니다. param.c, param_one.c 및 param_two.c는 모두 이름 시작 부분 에 "param"이 있습니다. third_param.c는 확장자 바로 앞에 이름 끝에 "param" 이 있습니다.

rename명령은 파일 이름의 모든 곳에서 "param"을 검색하고 모든 경우에 "parameter"로 바꿉니다.

ls명령 의 두 번째 사용  은 정확히 일어난 일임을 보여줍니다. "param"이 파일 이름의 시작 부분이든 끝 부분이든 관계없이 "parameter"로 대체되었습니다.

Perl의 메타 문자를 사용하여 중간 표현식의 동작을 개선 할 수 있습니다. 메타 문자는 문자의 위치 또는 시퀀스를 나타내는 기호입니다. 예를 들어, ^"문자열의 시작", "문자열의 $끝", .단일 문자 (개행 문자 제외)를 의미합니다.

^검색을 파일 이름의 시작으로 제한하기 위해 문자열 메타 문자 ( ) 의 시작을 사용할 것 입니다.

ls * param * .c
's / ^ parameter / value /'* .c 이름 바꾸기
ls * param * .c
ls 값 * .c

이전에 이름을 바꾼 파일이 나열되고 "parameter"문자열이 세 파일 이름의 시작 부분에 있고 파일 이름 중 하나의 끝에있는 것을 볼 수 있습니다.

rename명령은 (^검색어 '매개 변수'앞에 줄 시작  ) 메타 문자를 사용합니다. 이것은 rename검색 용어가 파일 이름의 시작 부분에있는 경우에만 검색된 것으로 간주하도록 지시 합니다. 검색 문자열 "parameter"는 파일 이름의 다른 곳에 있으면 무시됩니다.

로 확인 ls하면 파일 이름 끝에 "parameter" 가있는 파일 이름은 수정되지 않았지만 이름 시작 부분 에 "parameter"가있는 세 개의 파일 이름은 검색 문자열이 대체 용어로 대체 되었음을 알 수 있습니다. "값."

의 힘은 renamePerl 의 힘에 있습니다. Perl의 모든 기능을 마음대로 사용할 수 있습니다.

그룹으로 검색

rename소매에 더 많은 트릭이 있습니다. 이름에 비슷한 문자열이있는 파일이있는 경우를 생각해 봅시다. 정확히 같은 문자열이 아니므로 간단한 검색 및 대체가 여기서 작동하지 않습니다.

이 예에서는 ls "str"로 시작하는 파일을 확인하는 데 사용 합니다. 그 중 두 가지, string.c와 strangle.c가 있습니다. 그룹화라는 기술을 사용하여 한 번에 두 문자열의 이름을 바꿀 수 있습니다.

rename명령 의 중심 표현은 문자 시퀀스 "stri" 또는 "stra"가있는 파일 이름 내에서 문자열을 검색합니다. 여기서 해당 시퀀스 바로 뒤에 "ng"가옵니다. 즉, 우리의 검색어는 "string" "strang"을 찾을 것입니다. 대체 용어는 "bang"입니다.

ls str * .c
이름 바꾸기 's / (stri | stra) ng / bang /'* .c
ls ban * .c

ls 두 번째를 사용  하면 string.c가 bang.c가되고 strangle.c가 이제 bangle.c가되었음을 확인합니다.

이름 바꾸기와 함께 번역 사용

rename명령은 번역이라는 파일 이름에 대한 작업을 수행 할 수 있습니다. 번역의 간단한 예는 파일 이름 집합을 대문자로 강제하는 것입니다.

에서 rename우리가 사용하지 않을 것을 통지 아래 명령 s/ 중앙 식을 시작하기 위해, 우리는 사용하고 있습니다 y/. 이것은  rename우리가 대체를 수행하지 않는다는 것을 의미합니다. 번역을하고 있습니다.

a-z 용어는 a에서 z까지의 시퀀스에있는 모든 소문자를 의미하는 Perl 표현식입니다. 마찬가지로이 A-Z 용어는 A에서 Z까지의 순서에있는 모든 대문자를 나타냅니다.

이 명령의 중심 표현은 "a에서 z까지의 소문자가 파일 이름에있는 경우 A에서 Z까지의 대문자 시퀀스에있는 해당 문자로 대체"로 바꿔 표현할 수 있습니다.

모든 ".prg"파일의 파일 이름을 대문자로 강제하려면 다음 명령을 사용하십시오.

'y / az / AZ /'* .prg 이름 바꾸기

ls * .PRG

ls명령은 모든 ".prg"파일 이름이 이제 대문자임을 보여줍니다. 사실, 정확히 말하면 더 이상 ".prg"파일이 아닙니다. ".PRG"파일입니다. Linux는 대소 문자를 구분합니다.

 중앙 표현식에서 a-zA-Z용어 의 위치를 ​​반대로하여 마지막 명령을 반대로 할 수 있습니다 .

'y / AZ / az /'* .PRG 이름 바꾸기

ls * .prg

5 분 안에 Perl을 배우지 못합니다.

Perl을 이해하는 것은 시간이 많이 소요됩니다. 그러나 rename명령 의 시간 절약 기능을 사용하기 시작 하기 위해 성능, 단순성 및 시간면에서 큰 이점을 얻기 위해 Perl 지식이 전혀 필요하지 않습니다.