이동 작업 대상으로 디렉토리 변경


12

때로는 일부 파일을 편집하여 다른 폴더로 이동하려고합니다. (일반적으로 Dropbox 폴더에는 폴더의 다른 소유자에게 지속적인 업데이트를 제공하지 않기 위해 작업하고 싶지 않았습니다.) 예를 들어

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

나중에 디렉토리를 이전 이동 작업의 대상 디렉토리로 변경하려는 경우가 종종 있습니다. 나는 위쪽 화살표를 file.pdf누르고 , final을 삭제하고 , 왼쪽을 잡고, 삭제 mv file.pdf하고로 바꿉니다 cd.

더 빠르고 똑똑한 방법이 있습니까? "파일 이동 후 디렉토리를 다음으로 변경"명령 또는 마지막으로 사용한 디렉토리의 단축키 등이 있습니까?


1
CTRL + Left를 누르고 있으면 더 빠른 단어로 왼쪽으로 이동합니다.
cat

셸 질문에 대한 답변이 아닌 측면 설명 : 일반적으로 편집하는 동안 Dropbox를 일시 중지합니다. 또한 다른 파일이 "내 발 아래"변경되지 않도록합니다.
Constantino Tsarouhas 2016 년

답변:


17

bash를 사용하는 경우 히스토리 상호 작용에는 바로 가기가 있습니다. 단어 지정자 이전 명령의 마지막 인수 :

!!:$
이전 명령의 마지막 인수를 지정합니다. 이로 단축 될 수 있습니다 !$.

수정 자 와 결합 하여 마지막 경로 이름 구성 요소를 제거하십시오.

선택적 단어 지정자 뒤에는 ':'이 앞에 오는 하나 이상의 유효한 수정 자 시퀀스를 추가 할 수 있습니다 .

h
머리 만 남기고 후행 경로 이름 구성 요소를 제거하십시오.

그래서:

$ echo /ab/c/d
/ab/c/d
$ echo !$:h
echo /ab/c
/ab/c

zsh와 동일한 바로 가기를 사용할 수도 있습니다.


1
이거 진짜 멌있다.
Geek

4

파일 이름을 변경하지 않으면 파일 이름을 생략하면 mv가 자동으로 추가합니다. 여러 파일을 이동할 때 특히 유용합니다.

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

디렉토리를 마지막 인수로 사용 !!:$하거나 !$muru의 답변에 설명 된대로 사용할 수 있습니다 .
일반적인 기본값으로 bash를 사용하는 경우 Alt+를 .대신 사용할 수 있습니다 .
이것은 readline insert-last-argument명령이며 bind -p현재 바인딩을 모두 나열합니다.


1
대상 파일 이름을 생략하면 대상 파일이 이미있는 경우 자동으로 대상 파일을 덮어 쓸 수 있습니다.
cat

mv-i/ --interactive또는 -n/ 옵션을 지정하지 않으면 항상 대상 파일을 자동으로 덮어 씁니다 --no-clobber. 그래서 내가 alias mv='mv -i' cp='cp -i'내 이유가 있습니다 .bashrc.
David Foerster

-1

또 다른 방법은이 목적을위한 전용 명령을 만드는 것입니다. 이것은 다음과 같은 기능 을 통해 수행 할 수 있습니다 .

$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }

여기서 : (1) mv-special 은 함수 이름입니다. (2) 변수 $1$2명령에 의해 사용될 함수의 인수 mvcd; (3) $(echo $2-) var의 문자열 끝에 와일드 캣 문자를 추가 하고 변수 에 경로 만 포함 된 경우의 $2동작을 수정합니다 . (4) 는의 경로 만 필터링합니다 .dirname$2 $(dirname $(echo $2-))$2

이 답변 에 따르면 기능은 다음과 같습니다.

$ function mv-special { mv $1 $2; cd ${2%/*}; }

여기서 : ${2%/*}의 경로 만 필터링합니다 $2.

명령으로 사용하려면이 기능을 보내야합니다 .

$ export -f mv-special

용법:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

또는:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/

두 변형 모두에 대해 두 번째 인수 ( $2)는 파일 이름 또는 슬래시 ( /)로 끝나야 합니다.

새 명령을 영구적으로 사용할 수 있으려면 함수 및 내보내기 명령의 정의가 다음에 추가되어야합니다 ~/.bashrc.

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special

또는:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

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


사용자 정의 명령을 할 수 있으며,에 배치됩니다 실행 스크립트 파일을 통해 ~/bin나에 /usr/sbin: 어떻게 (스크립트를 실행하기 위해) 사용자 정의 터미널 명령을 만들 수 있습니까? 그러나 솔직히 말해서, 나는 이 시나리오에서 문제가 발생 했습니다 cd.

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