현재 있는 디렉토리를 복사하고 싶습니다. 나는 전에 시도했다cp -a . ~/xyz
디렉토리의 내용을 복사하지만 다음과 같이 작동합니다.cp -a "$(pwd)" ~/xyz
[필요에 따라 내용이 포함된 디렉터리도 복사됩니다. ]
Dot은 Splat이 수행하는 작업을 수행하는 것 같습니다. 왜 작동하지 않습니까 .
?
답변1
.
이는 하위 디렉터리를 생성하는 데 해당 이름을 사용할 수 없기 때문에 수행됩니다 .
cp -a . ~/xyz
, 등 ./file1
으로 복사합니다 . 그러나 및 는 동일하므로 현재 디렉터리의 내용을 .~/xyz/./file1
./file2
~/xyz/./file2
~/xyz/./file1
~/xyz/file1
~/xyz
--verbose
cp
복사할 때 각 경로 이름을 표시 하는 옵션을 추가하면 이를 확인할 수 있습니다.
$ cp -av . ../foo/
‘./file1’ -> ‘../foo/./file1’
‘./file2’ -> ‘../foo/./file2’
.
이것 과 여기 *
의 주목할만한 차이점 중 하나 는 (숨김 파일과 일치하지 않음)과 달리 cp -a . /dir
숨겨진 파일을 복사 한다는 것입니다.*
~
이는 *
쉘 메타 문자입니다. 즉, cp
쉘이 보기 전에 확장된다는 의미입니다. 반면에 는 .
일반 디렉터리 항목입니다(이 항목이 포함된 디렉터리를 가리킵니다). 재귀 복사본이 소스인 cp
경우를 감지하고 디렉터리 이름을 바꾸는 코드를 포함 할 수 있지만 .
그렇지 않습니다. 아마도 아무도 그것이 중요하다고 생각하지 않기 때문일 것입니다.
또한, 어떤 이름으로 불러야 할까요? 파일 시스템은 일반적으로 디렉토리에 대한 다중 하드 링크를 허용하지 않기 때문에 파일보다 디렉토리에 대해 더 간단합니다( .
및 ..
항목 제외). 그러나 이것은 심볼릭 링크를 고려하지 않습니다. 최신 쉘은 심볼릭 링크를 통해 디렉토리에 들어갈 때 이를 추적하고 이를 pwd
.