cp 또는 mv 파일은 내가 다른 디렉토리에있을 때 이미있는 동일한 디렉토리에 있습니까? 수 있습니다

내가 ~/blob있고 파일이 있으면~/blob/a_long_directory_name/c/x.x

입력 할 수 있습니다

mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y

첫 번째 매개 변수 (현재 디렉토리는 아님)의 디렉토리 경로를 사용하여 더 짧은 것을 입력 할 수있는 바로 가기가 있습니까?

mv blob/a_long_directory_name/c/x.x $same_dir/y.y

$same_dirparam의 dir을 가리키는 것과 같은 곳 1



답변

타이핑 양을 최소화하려면 두 단계로 수행하는 것이 가장 쉬운 방법입니다. CD를 디렉토리로 이동 한 다음 이동하십시오.

하나의 명령 만있는 경우 서브 쉘을 사용할 수 있습니다.

$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )

이는 cd서브 쉘에서만 적용되며, 성공한 mv경우에만 발생 cd하며 현재 쉘의 작업 디렉토리는 변경되지 않음을 의미합니다.

둘 이상의 명령이있는 경우 디렉토리 스택을 사용하십시오.

$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd


답변

bash를 사용하면 괄호 확장을 사용할 수 있습니다

mv blob/a_long_directory_name/{c/x.x,evenmore/y.y}


답변

쉘의 텍스트 대체 기능을 사용할 수 있습니다. 에서 다음 bash과 같은 짐승을 사용할 수 있습니다.

mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy

그것을 분해하려면 :

!# 지금까지 입력 한 현재 줄입니다

:$고려중인 문자열 의 마지막 단어를 선택하도록 요청합니다 ( 이 경우에는 단어 n를 선택하기 위해 숫자 로 대체 ). 지금까지 입력 한 줄의 마지막 단어는 이전 단어입니다.n!#

:gs^xx^yy결과 단어에 대해 전역 ( g) 텍스트 대체 ( s)를 수행하여 ‘xx’를 ‘yy’로 바꿉니다. 패턴에서 사용할 수 ^있는 s명령 의 구분자 일뿐 /입니다.

이 방법은 경로의 일부 ( ‘xx’)를 다른 단어 ( ‘yy’)로 바꿀 수 있으므로 약간 더 일반적입니다.

마지막으로, 히스토리 조작과 마찬가지로 적절한 쉘 옵션을 설정하는 것이 좋습니다 (예 : in ~/.bashrc). 이 경우

shopt -s histverify

return 키를 누르면 편집 한 줄이 표시되므로 계속 편집하고 오류를 확인할 수 있습니다.

확실하지 않은 구조를 사용하는 이유는 확실하지 않지만이 경우에는 작동합니다.


답변