디렉토리 경로를 다시 입력하지 않고 파일 이름을 바꾸는 가장 빠른 방법


56

유닉스에서 파일 이름을 바꾸는 방법을 알고 있습니다.

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

~/folder/subfolder/file두 번 반복하는 데 시간이 너무 오래 걸립니다 .

더 빠른 방법이 있습니까?

답변:


104

쉘 경우 지원 중괄호 확장은 (작동 csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yash중괄호 확장 호출하여 사용할 수 yash --brace-expand또는과 interative 쉘 설정 set -o brace-expand, 또는 fish) :

mv ~/folder/subfolder/file.{txt,sh}

4
단순이 최고입니다!
Braiam

2
셸에서 화려한 확장 기능 사용!
harish.venkat

3
그것은 이다 굉장하지만 정말 비밀. 그것은 작동하지만 언뜻보기에 다른 것으로 생각합니다. 두 파일을 어딘가로 이동시킵니다. 나는 이것을 사용하는 훨씬 더 나은 솔루션이 있기 때문에 이것이 좋은 생각이라고 생각하지 않습니다 rename.
yo '

4
@tohecz : 왜 비밀 스럽습니까? 쉘의 기능이며 쉘 매뉴얼 페이지를 읽어서 누구나 알 수 있습니다. 그리고 기존 파일을 무시하도록 요청하지 rename않기 때문에 더 나은 솔루션 이라고 생각 rename하지 않습니다.
cuonglm

1
@Gnouc 당신은 남자입니다.
초보자

20

rename(util-linux 패키지의 일부)를 사용할 수도 있습니다 .

rename .txt .sh ~/folder/subfolder/file.txt

자세한 내용은 rename man 페이지 를 참조하십시오.


+1 이것은 쉘 {a,b}기능에 의존하는 것보다 훨씬 좋은 방법 입니다.
yo '

5
일부 Linux 배포판 (예 : 우분투)에서는 rename완전히 다른 펄 기반 프로그램입니다. 거기에을 사용 rename 's/txt$/sh/' ~/folder/subfolder/file.txt합니다.
evilsoup

데비안 (및 우분투)에도 있습니다 mmv.
ctrl-alt-delor

10

위의 모든 것이 좋습니다. 이것은 또한 작동합니다 :

( cd ~/folder/subfolder && mv file.txt file.sh )

아니요. 그것은 효과가 없습니다!
Hamed Kamrava

sudo부품 을 제거하면 작동합니다 .
크 툴후

1
@Cthulhu 네 권리. 그러나 왜 작동하지 sudo않습니까?
Hamed Kamrava

2
@HamedKamrava 아마도 루트 홈 디렉토리로 sudo해석 되기 때문일 것 ~입니다.
크 툴후

당신은 할 수 있지만 할 수 sudomv없습니다 cd. CD가 내장 쉘 이유를 참조하십시오 그리고 당신은 할 수 없습니다.sudo(
CTRL-ALT-delor

6

아니요. 파일 이름을 바꾸려면 파일의 전체 경로를 제공해야합니다. 유일한 대안은 다음을 실행하기 전에 대상 폴더로 이동하는 것입니다 mv.

cd ~/folder/subfolder/
mv file.txt file.sh

또는 대상 디렉토리의 파일 이름을 바꾸는 작은 함수를 작성할 수 있습니다. 예를 들어, 다음 행을 쉘 초기화 파일에 추가하십시오 (사용중인 ~/.bashrc경우 bash).

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

그런 다음 새 터미널을 열거 나 실행 source ~/.bashrc하여 init 파일을 다시 읽습니다.

lmv ~/folder/subfolder/file.txt file.sh

lmv()기능 +1 그 :) 몰랐
하메드 Kamrava

1
@HamedKamrava 아무도 그것을 몰랐다. 방금 썼는데 표준이 아닙니다.
terdon

2
알아. 나는 내 자신의 함수를 작성할 수 있다는 것을 몰랐다!
Hamed Kamrava

2

cuonglm의 대답의 유용성을 확장하기 만하면 (그의 해결책을 좋아할 때 신용을 얻지 마십시오) 그의 대답은 정답입니다.

유스 케이스는 종종 원격 위치 (실제 문제)에서 파일을 mv로 만들고 싶다는 것입니다. 예 : /folder/subfolder/configFile.dat TO configFile.dat.orig

이 형식의 명령 은 파일 확장자를 추가합니다 (원래 확장자를 대체하지 않음)

mv ~/folder/subfolder/file.txt{,.orig}

설명 : "{, .orig}"는 파일 이름 끝에있는 (아무것도) "(뭔가)".orig "로 바꾸는 것을 의미합니다.

또는 파일 확장자제거 하려면 (이름 바꾸기를 취소하십시오)

mv ~/folder/subfolder/file.txt{.orig,}

참고 : "dir 경로를 다시 입력하지 않고 파일 이름을 바꾸는 가장 빠른 방법"에 대한 주제


1

예. 당신이 사용하는 경우 bash, 당신이 할 sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd.

실제로는 더 크며를 수행 할 때 원래 디렉토리에 대한 액세스 권한을 잃으면 실패 할 수 있습니다 popd.


1
의 지점 무엇 pushdpopd여기가? 이보다 어떻게 더 나은 cd ~/folder/subfolder/ && sudo mv file.txt file.sh가요?
terdon

1
요점은 하위 폴더가 아닌 시작한 폴더에서 명령을 다시 수행 한 것입니다. 에 대한 대안은를 pushd popd사용 cd하고 다시 사용하는 것 cd -입니다.
jofel

질문자는 작업 디렉토리를 변경하지 않으려는 의도를 나타내는 것처럼 보였으며 가능한 경우 popd보다 낫습니다 cd ../../.
41754

7
(cd /path/to/there && mv x y)다음 사용 (서브 쉘과 함께)
Stéphane Chazelas

당신은 정말 sudo전에 넣어서는 안됩니다 pushd. 따라서 전체 명령은이어야합니다 pushd ...dir && sudo mv old new && popd. 대안으로, (cd ...dir; sudo mv old new)서브 쉘에서 실행하면 디렉토리 변경이 자동으로 처리되기 때문에 할 수 있습니다.
Mikko Rantalainen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.