병렬 디렉터리 복사 cp -r이 왜 이렇게 작동합니까?

병렬 디렉터리 복사 cp -r이 왜 이렇게 작동합니까?

다음은 잘 작동합니다(즉, 내가 원하는 것을 수행합니다).

 cd /var/www/release/
 mkdir wiki
 cp -rp ../html/wiki ./

하지만 이렇게 하면 (더 직관적인 것 같습니다)

 cp -r ../html/wiki ./wiki

/var/www/release/wiki/wiki를 생성합니다(절대로 원하지 않습니다).

이 동작은 mv와 동일합니다. 누군가가 이 행동의 이면에 있는 논리를 설명하여 나중에 처음부터 올바르게 수행할 수 있기를 바랍니다.

답변1

SOURCE전체 디렉토리를 에 복사하려면 디렉토리 가 어디에 저장되어야 하는지 알기를 cp원합니다 .DESTINATION

당신이 저지른 실수는 /var/www/release/wiki테스트 후 디렉토리를 삭제하지 않은 것입니다.mkdircp -rp ...

cp -r ...명령한 작업도 ../html/wiki마찬가지 입니다 .기존의디렉토리를 생성 ./wiki하여 이라는 이름의 또 다른 디렉토리를 생성합니다 wiki.

삭제한 /var/www/release/wiki다음 cp -r명령을 다시 실행하면 예상대로 작동하는 것을 볼 수 있습니다.

답변2

cp그리고 3가지 형태가 있어요mv

cp/mv [OPTION]... [-T] SOURCE DEST
cp/mv [OPTION]... SOURCE... DIRECTORY
cp/mv [OPTION]... -t DIRECTORY SOURCE...

양식 1과 2는 형식 cp/mv a b이고 양식 2 b는 기존 디렉터리이지만 양식 1 b은 대상입니다. 이러한 모호함을 피하려면 Form 2를 사용하지 마세요. 양식 1을 사용하여 수행하려는 작업을 완료하고 을 사용하십시오 -T. 기존 디렉터리로 이동하거나 복사하려면 양식 3을 사용하세요.

답변3

마지막 인수가 cp기존 디렉터리인 경우 cp소스 파일이 해당 디렉터리에 복사됩니다. mv같은 일을하십시오.

소스 디렉터리를 대상 디렉터리와 병합하려고 합니다. 그러나 이는 소스가 디렉터리인 경우에만 의미가 있습니다. cp somefile existing-directory/따라서 를 실행 하면 existing-directory/somefile;cp -r somedir existing-directory/​​​​existing-directory/somedircpcp -r somefile somedir existing-directory/existing-directory/somefileexisting-directory/somedir

cp something existing-directory소스 파일을 대상 디렉터리에 복사합니다. 소스가 디렉토리이고 해당 내용을 복사하려면 다음을 실행하십시오.

cp -rp something/* existing-directory/

생략되어 있으니 참고하세요이름이 a로 시작하는 파일.. 이를 포함하려면 다음을 사용하는 간단한 방법이 있습니다 rsync.

rsync -a something/ existing-directory/

의 경우 소스 끝에 rsync를 배치하면 소스의 내용이 대상 디렉터리에 복사됩니다. 소스가 뒤에 있지 /않으면 /소스가 대상 디렉터리에 항목으로 생성됩니다.

관련 정보