단일 명령에서 접두사를 사용하여 폴더의 모든 파일 이름 바꾸기


답변:


108

파일 이름에 whitepace 가없고 하위 디렉토리가없는 경우 간단한 for루프를 사용할 수 있습니다 .

$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 

그렇지 않으면 편리한 rename명령 (perl 스크립트)을 사용하십시오. 모든 유닉스에서 바로 사용할 수있는 것은 아니지만 (예 : OS X에는 rename.

debian-administration.org의 간략한 개요 :

파일 이름에 공백이 포함 된 경우 사용하기가 더 쉽고 findLinux에서는 다음이 작동합니다.

$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh

-printf불행히도 BSD 시스템에는 옵션 이 없습니다 . 그러나 GNU findutils 는 설치할 수 있어야합니다 (예 :를 사용하는 Mac OS X brew install findutils).

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh

@Matteo : 힌트 감사합니다 : 경고와 함께 두 가지 예를 find.
miku 2013-08-04

또한 for f in *; do [[ -f ${f} ]] && mv ...; done파일 만 잡는 것이 좋습니다 (하위 디렉토리, 링크 등 없음) ...
twalberg

1
원하는대로 변수를 인용 for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done하면 파일 이름에있는 문자에 관계없이 올바르게 작동합니다. 디렉토리, 소켓, 심볼릭 링크 및 기타 파일 유형도 이동합니다. 나는 그것이 중요하지 않다고 생각합니다.
Jonathan Leffler

어떻게 든 이것은 .내 모든 파일 앞에 추가되었습니다
null 허용

78

파일이있는 폴더 에서 rename명령 시도하십시오 .

rename 's/^/Unix_/' *

rename ( sed s 명령 ) 의 인수 는 regex ^Unix_ 로 대체 함을 나타냅니다 . 캐럿 (^)은 줄의 시작 을 의미하는 특수 문자입니다 .


9
무슨 's/^/.../'뜻 인지 설명해 주 시겠습니까?
mcont

@Matteo는 's/^/.../'의 펄 식 인수 인 이름 바꾸기 명령
RoyalleBlue

이것은 굉장합니다! 폴더 / *를 추가하는 것이 좋습니다. 명령이 실수로 다른 곳에서 반복 될 경우 *는 약간 위험하기 때문입니다
Systems Rebooter

brew install rename @OliverPearmain
Felipe Plazas

접두사 대체 예 :rename 's/^start_/run_' *
DenisKolodin 19

36

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

ls | xargs -I {} mv {} Unix_{}

예, 단순하지만 우아하고 강력하며 한 줄짜리입니다. 페이지에서 더 자세한 소개를 얻을 수 있습니다. 파일 및 디렉토리 이름 바꾸기 (접두사 추가)


2
출력 처리에주의하십시오 ls. 파일 이름에 공백이나 기타 이상한 문자가 있으면 문제가 발생할 수 있습니다.
Jonathan Leffler

17

나는 최근에 이와 같은 상황에 직면했고 더 쉬운 내장 솔루션을 찾았습니다. 다른 사람들이 해결책을 찾는 데 도움이 될 수 있도록 여기에서 공유하고 있습니다.

OS X Yosemite를 통해 Apple은 일괄 이름 변경 기능을 Finder에 직접 통합했습니다. 자세한 정보는 여기에서 확인할 수 있습니다 . 아래 단계도 복사했습니다.

여러 항목 이름 바꾸기

  1. 항목을 선택한 다음 항목 중 하나를 Control- 클릭하십시오.

  2. 바로 가기 메뉴에서 항목 이름 바꾸기를 선택합니다.

  3. 폴더 항목 이름 바꾸기 아래의 팝업 메뉴에서 이름의 텍스트를 대치하거나 이름에 텍스트를 추가하거나 이름 포맷을 변경하도록 선택하십시오.

    • 텍스트 교체 : 찾기 필드에 제거하려는 텍스트를 입력 한 다음 "바꿀 내용"필드에 추가하려는 텍스트를 입력하십시오.

    • 텍스트 추가 : 필드에 추가하려는 텍스트를 입력 한 다음 현재 이름 앞뒤에 텍스트를 추가하도록 선택하십시오.

    • 형식 : 파일의 이름 형식을 선택한 다음 이름 앞뒤에 색인, 카운터 또는 날짜를 입력하도록 선택하십시오. 사용자 정의 형식 필드에 이름을 입력 한 다음 시작할 번호를 입력하십시오.

  4. 이름 바꾸기를 클릭합니다.

파일에 텍스트 바꾸기를 사용할 수있는 것보다 일반적인 패턴이있는 경우 그렇지 않으면 텍스트 추가도 작업을 수행합니다.


1
우수-많은 시간을 절약했습니다!
user3000868 jul.

7

-i대신 사용할 수 있습니다.-I {}

ls | xargs -i mv {} unix_{}

이것은 또한 완벽하게 작동합니다.

  • ls -디렉토리의 모든 파일을 나열합니다.
  • xargs- -i옵션 으로 인해 모든 파일을 한 줄씩 허용
  • {}모든 파일의 자리 표시 자입니다. xargs입력으로 인수를 두 개 이상 가져 오는 경우 필요합니다.

awk 사용 :

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh

-i더 이상 사용되지 않습니다. 지금은 단지-I
JamPow

그것은 데비안 8.Thaks에 저를 도왔다
Abror Esonaliev에게

2

공백이있는 항목에서도 작동하고 디렉토리를 무시합니다.

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done

1

RNM (당신은 그것을 설치해야합니다) :

rnm -ns 'Unix_/fn/' *

또는

rnm -rs '/^/Unix_/' *

추신 : 저는이 도구의 저자입니다.


2
유틸리티에 대한 모든 답변을 검토하고 작성자라는 면책 조항을 추가해야합니다.
Mogsdad

@Mogsdad : 필요한 정보라고 생각하지 않습니다. 누군가 저자를 찾고 싶다면 꽤 쉽습니다.
Jahid

이 도구에 감사드립니다. 어떤 이유에서인지, rename나를 위해 작동하지 않지만 작동합니다 rnm.
Aloso

0

상태:

우리는 certificate.key certificate.crt안에/user/ssl/

로 시작하는 모든 이름 certificatecertificate_OLD

우리는 이제 내부에 있습니다. /user

먼저 다음을 사용하여 드라 이런을 수행합니다 -n.

rename -n "s/certificate/certificate_old/" ./ssl/*

다음을 반환합니다.

rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)

파일은 변경되지 않습니다. 이것은 단지 테스트 실행 일뿐입니다.

해결책:

테스트 결과에 만족하면 실제 실행 :

rename "s/certificate/certificate_OLD/" ./ssl/*

의미 :

` "s / SOMETHING / SOMETING_ELSE"경로 / 파일 이름 바꾸기

팁:

이미 경로에 있다면 다음과 같이 실행하십시오.

rename "s/certificate/certificate_OLD/" *

또는 do로 시작하는 하위 디렉토리에서 ss이를 수행하려면 다음 을 수행하십시오.

rename -n "s/certificat/certificate_old/" ./ss*/*

다음을 수행 할 수도 있습니다.

rename -n "s/certi*/certificate_old/" ./ss*/*

다음으로 시작 certi하는 하위 디렉토리에서로 시작하는 모든 이름을 바꿉니다.ss .

하늘이 한계입니다.

정규식을 가지고 놀며 -n.

일치하는 폴더 이름이 변경 될 수도 있습니다. cd디렉토리에 더 잘 들어가서 거기에서하십시오. 자신의 위험 부담으로 사용하십시오.


0

find -execdir rename

이렇게하면 기본 이름에만 영향을주는 정규식으로 파일과 디렉토리의 이름이 바뀝니다.

따라서 접두사에 대해 다음을 수행 할 수 있습니다.

PATH=/usr/bin find . -depth -execdir rename 's/^/Unix_/' '{}' \;

또는 파일에만 영향을줍니다.

PATH=/usr/bin find . -type f -execdir rename 's/^/Unix_/' '{}' \;

-execdir처음 cd에만 기본 이름에 실행하기 전에 디렉토리에이야.

자세한 내용은 다음에서 설명했습니다. 여러 파일 찾기 및 Linux에서 이름 바꾸기

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