LPIC-1 PDF를 읽고 있습니다. 그것은 말한다:
일반적으로 디렉토리의 전체 내용을 복사하려면 다음을 사용합니다.
cp -r 소스 경로/* 대상 경로
하지만 *가 없는 -r 옵션 자체만으로는 충분하지 않은 이유를 이해할 수 없습니다. 맞아야합니까?
감사해요.
편집: 나는 그것을 시도했고 결과는 흥미로웠습니다. 첫째, 대상이 존재하지 않는 경우 소스의 * 와일드카드는 대상 디렉터리가 없기 때문에 오류를 발생시킵니다. *cp가 없으면 최상위 디렉터리와 하위 디렉터리에 숨겨진 파일을 포함하여 모든 숨겨진 파일이 복사됩니다.
반면에 대상이 존재하고 소스에서 * 와일드카드를 사용하는 경우 cp는 맨 위에 있는 모든 파일(숨겨진 파일 제외)을 복사하지만 하위 디렉터리의 숨겨진 파일도 포함합니다.
[rocky@rocky ~]$ tree -a test1
test1
├── .hiddentestfile1
├── test2
│ ├── .hiddentestfile2
│ └── testfile2
└── testfile1
1 directory, 4 files
[rocky@rocky ~]$ cp -r test1/* newdest
cp: target 'newdest' is not a directory
[rocky@rocky ~]$ cp -r test1/ newdest
[rocky@rocky ~]$ tree -a newdest
newdest
├── .hiddentestfile1
├── test2
│ ├── .hiddentestfile2
│ └── testfile2
└── testfile1
1 directory, 4 files
[rocky@rocky ~]$ rm -r newdest
[rocky@rocky ~]$ mkdir newdest
[rocky@rocky ~]$ cp -r test1/* newdest
[rocky@rocky ~]$ tree -a newdest
newdest
├── test2
│ ├── .hiddentestfile2
│ └── testfile2
└── testfile1
1 directory, 3 files
답변1
cp -r SOURCE_PATH/* DEST_PATH
각 (숨겨지지 않은) 파일이나 디렉터리와 그 내용을 DEST_PATH에 반복적으로 복사합니다(이것이 디렉터리이거나 디렉터리에 대한 심볼릭 링크라고 가정).
그런 다음 SOURCE_PATH에 , 및 가 file
포함 되어 있으면 sum 으로 끝납니다 .dir
.git
DEST_PATH/file
DEST_PATH/dir
DEST_PATH
존재하지 않거나 디렉터리가 아니고 SOURCE_PATH
숨겨지지 않은 파일이나 디렉터리(예: )만 포함하는 경우 해당 디렉터리 SOURCE_PATH/file
는 복사되지 않고 복사됩니다 cp -r SOURCE_PATH/file DEST_PATH
. 이는 DEST_PATH의 복사본이 생성됨을 의미합니다( 또는 덮어쓰기) file
. 명령에서 DEST_PATH에 추가하면 /
이런 일이 발생하지 않습니다(복사 또는 실패 보장).디렉토리가 아님-t
; GNU 옵션 도 참조하세요 cp
.
그리고:
cp -r SOURCE_PATH DEST_PATH
SOURCE_PATH 디렉터리(숨겨진 파일을 포함하여 해당 내용을 반복적으로 포함)를 DEST_PATH에 복사하면(다시 한번 디렉터리가 존재하고 디렉터리라고 가정 ) , 로 끝납니다 DEST_PATH/SOURCE_PATH
. DEST_PATH/SOURCE_PATH/{.git,dir,file}
따라서 완전히 다른 결과가 나타납니다.
여기에 모두 복사하세요콘텐츠SOURCE_PATH(숨겨진 파일 포함) SOURCE_PATH 자체를 DEST_PATH에 넣는 대신 다음을 사용하는 것이 좋습니다.
cp -r SOURCE_PATH/. DEST_PATH
숨겨진 파일도 포함하는 것 외에도(zsh를 가정하면 해당 파일도 사용할 수 있음 cp -r SOURCE_PATH/*(D) DEST_PATH/
) 다음과 같은 경우 실패하지 않는다는 장점이 있습니다.너무 많이 논쟁하다SOURCE_PATH에 숨겨지지 않은 파일이 너무 많으면 오류가 보고됩니다. SOURCE_PATH가 비어 있으면 오류가 보고되지 않습니다. 또한 DEST_PATH가 존재하지 않으면 결국 SOURCE_PATH의 복사본으로 생성됩니다.
GNU 구현을 사용하면 cp
동일한 작업을 수행할 수 있습니다.
cp -rT SOURCE_PATH DEST_PATH
( 대상이 디렉터리인 경우에도 복사 대상 대신 강제 복사 -T
라고도 함 )--no-target-directory