이 답변 은 숨겨진 파일을 포함하여 모든 파일을 디렉토리에서 디렉토리 src
로 복사 할 수 있음을 나타냅니다 dest
.
mkdir dest
cp -r src/. dest
왜 이것이 실제로 작동하는지에 대한 답변이나 의견에는 설명이 없으며 아무도 이것에 대한 문서를 찾지 못하는 것 같습니다.
몇 가지를 시도했습니다. 첫째, 일반적인 경우 :
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file src
그런 다음 /.
끝에 :
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file .dotfile src_dir src_file
따라서 이와 비슷하게 동작 *
하지만 숨겨진 파일도 복사됩니다.
$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest
$ ls -A dest
dest_file src_dir src_file
.
와 ..
같은 적절한 하드 링크는 여기에서 설명하는 단지 디렉토리 항목 자체처럼.
이 행동은 어디에서 왔으며 어디에 기록되어 있습니까?
답변
동작은에 대한 문서화 된 알고리즘의 논리적 결과입니다 cp -R
. POSIX , 2f 단계를 참조하십시오 .
source_file 디렉토리의 파일은 여기에 나열된 4 단계 (1-4)를 source_files 로 사용하여 dest_file 디렉토리로 복사해야합니다 .
.
및 ..
디렉토리는 각각 현재 디렉토리 및 상위 디렉토리입니다. 쉘에 관한 한 특별한 것도 아니므로 확장에 관심이 없으며 숨겨진 파일을 포함하여 디렉토리가 복사됩니다. *
반면에는 파일 목록으로 확장되며 숨겨진 파일이 필터링되는 곳입니다.
src/.
현재 디렉토리 내부에 src
있다, src
그 자체; src/src_dir/..
입니다 src_dir
다시는 ‘부모 디렉토리, src
. 그래서 외부에서 src
, 경우는 src
지정하는 디렉토리 src/.
나 src/src_dir/..
에 대한 소스 파일로 cp
동일하고 내용 복사 src
숨겨진 파일을 포함하여.
지정의 요점은 디렉토리 (또는 디렉토리에 대한 기호 링크)가 아닌 src/.
경우 실패하지만 실패 하지는 않는다는 것입니다. 또한 자체 를 복사하지 않고 내용 만 복사 합니다. 이것은 문서와도 일치합니다.src
src
src
src
경우 대상이 기존 디렉토리 존재와 이름, 파일 계층의 각 파일에 해당하는 대상 경로의 이름의 연결한다 대상 , 단일 슬래시 문자 대상이 슬래시로 끝나지 않은 경우, 파일의 상대 경로 이름 디렉토리 포함에 source_file .
그래서 cp -R src/. dest
사본의 내용 src
에 dest/.
(소스 파일이 .
있는 src
), 반면 cp -R src dest
사본의 내용 src
으로는 dest/src
(소스 파일입니다 src
).
이 생각하는 또 다른 방법은 복사 비교하는 것입니다 src/src_dir
및 src/.
보다는 비교 src/.
하고 src
. 전자의 경우 .
처럼 작동합니다 src_dir
.
답변
당신이 실행 cp -R src/foo dest
하면 얻을 것이다 dest/foo
. 디렉토리가 경우에 따라서 dest/foo
존재하지 않는, cp
그것을 만들 것입니다, 다음의 내용을 복사 src/foo
에 dest/foo
.
당신이 실행하면 cp -R src/. dest
, cp
그보고 dest/.
존재하고, 그것은의 내용을 복사 단지 문제는 src/.
로를 dest/.
.
라는 이름의 디렉토리에 복사로 생각할 때 .
부터를 src
기존 디렉토리와 그 내용을 병합 dest/.
, 그것은 이해가됩니다.