다음은 잘 작동합니다(즉, 내가 원하는 것을 수행합니다).
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
테스트 후 디렉토리를 삭제하지 않은 것입니다.mkdir
cp -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/somedir
cp
cp -r somefile somedir existing-directory/
existing-directory/somefile
existing-directory/somedir
cp something existing-directory
소스 파일을 대상 디렉터리에 복사합니다. 소스가 디렉토리이고 해당 내용을 복사하려면 다음을 실행하십시오.
cp -rp something/* existing-directory/
생략되어 있으니 참고하세요이름이 a로 시작하는 파일.
. 이를 포함하려면 다음을 사용하는 간단한 방법이 있습니다 rsync
.
rsync -a something/ existing-directory/
의 경우 소스 끝에 rsync
를 배치하면 소스의 내용이 대상 디렉터리에 복사됩니다. 소스가 뒤에 있지 /
않으면 /
소스가 대상 디렉터리에 항목으로 생성됩니다.