경로가 매우 긴 파일이 있습니다. 예를 들면 다음과 같습니다.
/opt/very/long/path/file1
이 디렉터리의 파일을 복사하고 싶습니다.
cp /opt/very/long/path/file1 /opt/very/long/path/file2
나는 이 긴 길을 반복하고 싶지 않다. 대상 폴더로 이동하여 다음을 복사할 수 있습니다.
cd /opt/very/long/path/
cp file1 file2
하지만 디렉토리를 변경하고 싶지 않습니다. 한 가지 이유는 긴 경로가 많으면 매번 디렉토리로 들어가야 하기 때문입니다.
cd /opt/very/long/path/
cp file1 file2
cd /opt/other/very/very/long/path/
cp fileA fileB
또 다른 이유는 컨텍스트와 명확한 기록을 보존하고 싶기 때문입니다(각 명령에는 복사된 내용과 위치가 표시됩니다).
따라서 디렉토리를 변경하지 않는 것이 좋습니다.
cp /opt/very/long/path/file1 /opt/very/long/path/file2
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
하지만 나는 그 길을 반복해야 한다.
그런 지름길이 있나요?
cp /opt/very/long/path/file1 ./file2
cp /opt/other/very/very/long/path/fileA ./fileB
그러나 점은 .
"현재 디렉토리"를 의미합니다."대상 디렉터리" 또는 "소스 디렉터리"를 나타내는 문자는 무엇입니까?
cp /opt/very/long/path/file1 <destination>/file2
cp /opt/other/very/very/long/path/fileA <destination>/fileB
답변1
중괄호 확장은 다음과 같은 경우에 유용합니다.
cp /opt/other/very/very/long/path/{fileA,fileB}
...다음으로 확장됩니다.
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
실제로 실행될 때.
명령은 입력과 동시에 기록에 표시되며 경로는 유지됩니다.
$ history
# ...
508 cp /opt/other/very/very/long/path/{fileA,fileB}
509 history
답변2
로그 경로로 변수를 설정하고 cp 명령에서 변수를 사용할 수 있습니다.
예를 들어
export dir="/opt/very/long/path"
cp "$dir"/file "$dir"/file2
답변3
두 폴더 간에 동기화하려면 rsync를 사용할 수 있습니다.
rsync는 로컬 호스트와 원격 호스트 간의 동기화에도 사용할 수 있습니다.
위 시나리오의 경우 localhost에서 사용됩니다.
rsync -avzh sourcefolder destinationfolder
답변4
다음을 입력할 수 있습니다:
cp /opt/other/very/very/long/path/fileA !#:1:h/fileB
역사적으로 다음과 같이 확장됩니다.
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
설명하다:
!#
- 현재 행을 가져옵니다.:1
- 첫 번째 매개변수를 가져옵니다.:h
- 폴더 가져오기
(고마워하는이 기사)
약점은 다음과 같습니다.
up arrow
확장 내용을 히스토리에 저장하기 때문에 입력한 명령을 눌러서 가져올 수는 없지만 ,- 두 번째 파일 이름 자동 완성이 작동하지 않습니다.