명령 줄을 사용하여 여러 파일의 이름을 쉽게 바꾸려면 어떻게해야합니까?


103

Windows에서 파일의 이름을 빠르게 바꾸는 방법 중 하나는

F2 > Rename > Tab (to next file) > Rename ...

그러나 우분투 / 노틸러스에서는 다음 파일로 이동할 수 없습니다. 그러나 Linux에서는 명령 줄 대안이 있어야한다고 생각합니다.

그러나 때로는 특정 파일의 이름을 바꾸는 방법을 더 많이 제어하고 싶을 수도 있습니다. 이 경우 다음 파일로 탭하는 것이 더 좋습니다.


1
"더 많은 제어"를 정의 할 수 있습니까? 정확히 무엇을 요구하는지 잘 모르겠습니다.
Dang Khoa

나는이 질문에 대답하지 않았다고 생각한다. 당신이 요구하는 것 (F2를 누른 다음 F2 모드에서 다음 파일로 점프)은 현재 사용할 수 없습니다. 노틸러스에서 생각합니다.
don.joey

답변:


187

나는 rename항상 사용 합니다. 꽤 간단하지만 기본 정규식을 알고 있기를 바랍니다.

rename "s/SEARCH/REPLACE/g"  *

모든 파일에서 문자열 SEARCHREPLACE바꿉니다 (즉, *). /g당신이 있었다, 그래서 만약 수단 글로벌 SEARCH_SEARCH.jpg, 그 이름이 변경된다 REPLACE_REPLACE.jpg. 을 가지고 있지 않다면 /g대체를 한 번만 수행 했으므로 이제 이름이으로 변경되었습니다 REPLACE_SEARCH.jpg. 대소 문자를 구분하지 않으려면 추가하십시오 /i( 끝 /gi또는 /ig끝에).

정규식을 사용하면 더 많은 일을 할 수 있습니다.

이 참고 rename는 IS prename(일명 펄 rename완전한 펄 정규 표현식을 지원하는) 명령. rename패턴을 사용하고 강력하지 않은 다른 것이 있습니다 . prename우분투 (펄과 함께)에 기본적으로 설치되었지만 이제는 다음을 수행해야 할 수도 있습니다.

sudo apt install rename

몇 가지 예는 다음과 같습니다.

접두사

추가 :

rename 's/^/MyPrefix_/' * 
  • document.pdf 로 개명 MyPrefix_document.pdf

제거 :

또한 원치 않는 문자열을 제거 할 수 있습니다. 이름이 같은 MP3 파일이 20 개 있는데 CD RIP 01 Song.mp3"CD RIP"부분을 제거하고 하나의 명령으로 모든 파일에서 해당 파일 을 제거하려고한다고 가정합니다.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp301 Song.mp3

공백이 '^CD RIP '없으면 모든 파일에 공백이 파일의 첫 문자가됩니다. 또한 ^문자 없이 작동 하지만 CD RIP 파일 이름의 모든 부분에서 일치 합니다. ^가 파일의 시작 부분이 있다면 보장 만 문자를 제거합니다.

접미사

추가 :

rename 's/$/_MySuffix/' *
  • document.pdf 로 개명 document.pdf_MySuffix

변경 :

rename 's/\.pdf$/.doc/' *

로 변경 Something.pdf됩니다 Something.doc. (백 슬래시의 이유 .는 정규 표현식의 와일드 카드 문자이므로 .pdf일치 qPDF하는 반면 \.pdf정확한 문자열과 만 일치합니다 .pdf. BASH에 익숙하지 않은 경우 백 슬래시를 SINGLE 따옴표로 묶어야합니다! 또는 큰 따옴표를 사용 또는 bash 그들을 번역하려고합니다. 비난하기 \. "\." 동일 .하기 때문이다. (그러나 큰 따옴표와 백 슬래시 예를 들어, 사용하는 "\ n"은 줄 바꿈에 대한,하지만 "\."유효한 다시 이스케이프 시퀀스 아니라, 그것을 로 번역됨 .)

실제로 문자열의 일부를 전체 대신 따옴표로 묶을 수도 있습니다. BASH 와 's/Search/Replace/g'동일 합니다. 특수 문자 (및 공백)에주의해야합니다.s/'Search'/'Replace'/gs/Search/Replace/g


-n긍정적이지 않은 경우에는 올바른 정규 표현식을 사용하는 것이 좋습니다 . 이름이 바뀐 이름을 표시 한 후 이름을 바꾸지 않고 종료합니다. 예를 들면 다음과 같습니다.

rename -n s/'One'/'Two'/g *

여기에는 -n깃발을 넣지 않은 경우의 모든 변경 사항이 나열됩니다 . 좋아 보인다면을 눌러 Up되돌아 가서를 지우고을 -n누르십시오 Enter(또는 교체하여 -v변경 사항을 모두 출력하십시오).

참고 : 17.04 이상의 Ubuntu 버전 rename은 기본적으로 제공 되지 않지만 리포지토리에서 계속 사용할 수 있습니다. 사용 sudo apt install rename하여 설치


"동적"접미사를 어떻게 갖습니까? 001-010 등. 가능합니까?
Jiew Meng

흠 .. 무언가를 쓰려고했지만 효과가 없었습니다. 주로 1에 001을 더하면 002가 아닌 2에 더하기 때문입니다. 그렇지 않으면 변수를 사용하여 숫자 위치를 잡고 추가 할 수 있습니다. 또한, 나는 그 rename명령 에 대해 알기 전에 이것이 내가 추가 한 일을 기억했다.for f in *; do mv -v "$f" "prependThis$f"; done
Matt

2
@jiewmeng 예. (?:\.[0-9]{3})$패턴에 사용 하면 수동 그룹의 3 자리 파일 확장자와 모두 일치합니다. 예 : rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *. 이 정규식 치트 시트를 살펴보십시오 .
sergio91pt

@ sergio91pt 그것은 좋은 정규식 치트 시트입니다. 그러나 무엇에 관한 것입니까? 펄이어야합니다-그러나 그런 메모를 찾을 수 없습니다.
Adobe

@Adobe "perl based regex"의 일반적인 것입니다. + 기호에 대한 메모와 POSIX 문자 클래스에 대한 열을보십시오.
sergio91pt

21

pyrenamer를 사용해보십시오 .

노틸러스와 통합되어 있지 않지만 작업이 완료됩니다. 여기 리뷰가 있습니다.

Thunar (XFCE의 일부)에는 개별적으로 실행할 수있는 이름 바꾸기 기능도 있습니다.

Thunar 대량 이름 바꾸기


2
Thunar 기능을 언급 해 주셔서 감사합니다. Thunar가있는 경우 폴더에서 파일을 선택하고 F2를 누르십시오.
최대

9

런치 패드에 nautilus-renamer 라는 프로젝트가있는 것 같습니다 . make install스크립트를 다운로드하고 압축을 풀면 실행하여 설치할 수 있습니다 . 일부 기능이 있거나 일부 프로그래밍을 알고 있다면 파이썬 스크립트 일 뿐이므로 필요에 따라 향상시킬 수 있습니다.

여기에 이미지 설명을 입력하십시오


8

명령 행에서 단일 파일의 이름을 바꾸려면 명령은 다음과 같습니다.

mv file1.txt file2.txt

일괄 적으로 수행하려면 스크립트를 통해 수행해야 할 것입니다. 더 자세한 정보를 제공하면 나 또는 다른 사람이 당신을 대신해서 채찍질 할 수 있습니다. 즉, 파일에 내용을 추가하는 스크립트는 다음과 같습니다.

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

정확히 이름을 변경해야하는 방법에 따라, 예를 들어 특정 이름 변경 규칙을 따르는 경우 조정될 수 있습니다. (개인적으로 나는 bash-foo가 그렇게 크지는 않지만 Perl 스크립트를 통해 이것을 할 것입니다.)

이전에 질문 한 내용 과 파일 이름 및 확장자가 분리되어 있습니다.


7

Windows에서 수행 한 작업과 유사하게 명령 줄없이 수행하려면 tab 키 대신 오른쪽 화살표 키를 사용 하십시오 . 이것은 Windows에서 탭과 마찬가지로 다음 파일을 선택합니다.


동일하지 않습니다. 이름 바꾸기를 마치려면 Enter 키를 누르고, 다음 파일로 이동하려면 화살표 키를, 이름을 바꾸려면 F2 키를 눌러야합니다. TAB은 파일 이름을 바꾸면 1 단계로 처리합니다.
MestreLion

@MestreLion 그러나 문제에 설명 된 알고리즘과 매우 유사하며 추가 소프트웨어 나 명령 줄 작업이 필요하지 않습니다. 사용자 친화적 인 것.
Rafał Cieślak

사실, 당신은 적어도 원래 질문과 같은 접근법을 시도한 유일한 대답이었습니다 . 그리고 슬픈 사실은 노틸러스에는 그러한 기능이 없다는 것입니다. F2를 사용하여 이름을 바꿀 수 있지만 그게 다입니다. 이름 바꾸기 모드에서 다음 파일로 자동 이동하는 탭이 없습니다.
MestreLion 5

7

실제로 한 번에 많은 파일의 이름을 바꿀 수있는 방법 과 같은 질문은 아닙니다 . 그러나 나는 그 대답에서 제안한 것과 동일한 프로그램을 제안 할 것입니다 : qmv .

qmv는 renameutils 패키지의 편리한 도구입니다. 자주 사용하는 텍스트 편집기를 사용하여 파일 이름을 바꿀 수 있습니다. vim의 힘과 결합하여 뛰어난 이름 변경 유틸리티를 사용할 수 있습니다.

나는 보통 qmv -f do많은 파일의 이름을 바꾸려는 디렉토리 와 같이 호출 합니다. 또는 재귀 적으로 이름을 바꾸려면 qmv -R -f do.

여러 파일의 이름을 바꾸어야 할 때마다 항상 qmv (및 vim)로 돌아갑니다.

http://www.nongnu.org/renameutils/


방금 당신의 제안에 따라 이것을 시도했습니다. vim을 사용한다면 정말 멋진 도구입니다!
ste_kwr

3

유일한 적절한 옵션이 파일 이름을 수동으로 바꾸는 vidir경우 moreutils패키지 에서 다음을 사용하는 것이 좋습니다 .

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.


선택적으로 파일 이름 바꾸기

현재 작업 디렉토리의 내용 :

.
├── bar
├── baz
└── foo

실행 vidir하고 이름을 바꾸려는 파일 이름이 포함 된 줄에서 파일 이름을 바꿉니다. CTRL+ OCTRL+를 누르십시오 X.

스크린 샷 3

.
├── bar.bak
├── baz.old
└── foo.new

선택적으로 파일 이름 전환

현재 작업 디렉토리의 내용 :

.
├── bar
├── baz
└── foo

현재 작업 디렉토리의 파일 내용 :

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

를 실행 vidir하고 전환하려는 파일 이름이 포함 된 줄의 숫자를 전환하십시오. CTRL+ OCTRL+를 누르십시오 X.

스크린 샷 4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

선택적으로 파일 제거

현재 작업 디렉토리의 내용 :

.
├── bar
├── baz
└── foo

실행 vidir하고 삭제하려는 파일이 포함 된 줄을 제거하십시오. CTRL+ OCTRL+를 누르십시오 X.

스크린 샷 2

.
└── baz

2

krename을 사용하고 있습니다. GUI 앱입니다. mp3 태그 등을 읽을 수 있습니다.

Krusader의 일부일뿐만 아니라 별도의 앱으로 존재합니다.

rename표준 perl 설치의 일부인 스크립트 도 있습니다 (아마도 설치했을 것입니다). 로 확인하십시오 man rename.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.