대상 폴더에 파일 복사

대상 폴더에 파일 복사

경로가 매우 긴 파일이 있습니다. 예를 들면 다음과 같습니다.

/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확장 내용을 히스토리에 저장하기 때문에 입력한 명령을 눌러서 가져올 수는 없지만 ,
  • 두 번째 파일 이름 자동 완성이 작동하지 않습니다.

관련 정보