이 답변다음과 같이 디렉터리의 모든 파일(숨김 파일 포함)을 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
.
그리고 ..
올바른 하드 링크가 있습니까?여기에 설명되어 있습니다, 디렉토리 항목 자체와 같습니다.
이 동작은 어디에서 발생하며 어디에 문서화되어 있나요?
답변1
이 동작은 녹음 알고리즘의 논리적 결과입니다 cp -R
. 바라보다POSIX, 2f단계:
디렉토리의 파일소스 파일이 디렉토리에 복사해야 합니다대상 파일, 여기에 나열된 네 단계(1~4)를 수행하면 파일은 다음과 같습니다.소스 파일.
.
및 ..
디렉토리는 각각 현재 디렉토리와 상위 디렉토리입니다. 쉘에 관한 한 둘 다 특별하지 않으므로 확장도 포함되지 않으며 숨겨진 파일을 포함하여 디렉토리가 복사됩니다. *
반면에 파일 목록으로 확장되며 여기에서 숨겨진 파일이 필터링됩니다.
src/.
내부의 현재 디렉토리는 다시 상위 디렉토리 src
이므로 외부에서 또는 소스 파일로 지정하는 것은 src
동일 하며 숨겨진 파일을 포함하여 내용을 복사합니다.src/src_dir/..
src_dir
src
src
src
src/.
src/src_dir/..
cp
src
지정의 요점은 디렉토리(또는 디렉토리에 대한 심볼릭 링크)가 아닌 경우 src/.
실패하지만 그 반대는 아니라는 것입니다. 또한 자체가 아닌 내용만 복사합니다. 이는 문서와도 일치합니다.src
src
src
src
만약에표적기존 디렉터리가 존재하고 이름이 지정되며 파일 계층의 각 파일에 해당하는 대상 경로의 이름이 연결되어야 합니다.표적, 단일 슬래시 문자(대상이 슬래시로 끝나지 않는 경우) 및 포함 디렉토리에 대한 상대 파일의 경로 이름소스 파일.
따라서 cp -R src/. dest
to(소스 파일이 있는 위치)의 내용이 복사되고, to(소스 파일이 있는 위치)의 내용이 복사됩니다.src
dest/.
.
src
cp -R src dest
src
dest/src
src
그것에 대해 생각하는 또 다른 방법은 합계를 비교하는 대신 복사본 src/src_dir
과 합계를 비교하는 것입니다 . 동작은 이전 사례 와 같습니다 .src/.
src/.
src
.
src_dir
답변2
실행하면 을 cp -R src/foo dest
얻습니다 dest/foo
. 따라서 디렉터리가 dest/foo
존재하지 않으면 cp
디렉터리가 생성된 다음 해당 내용 src/foo
이 dest/foo
.
를 실행하면 cp -R src/. dest
이 있는 것을 cp
확인한 dest/.
다음 내용을 src/.
에 복사하면 됩니다 dest/.
.
.
from이라는 디렉터리를 복사 src
하고 그 내용을 기존 디렉터리와 병합하는 것으로 생각하면 dest/.
이해가 됩니다 .