일부 GNU Coreutils 명령에 -T/--no-target-directory
옵션 이있는 이유는 무엇 입니까? .
전통적인 Unix 디렉토리 계층에서 (self dot) 의 의미를 사용하여 수행 할 수있는 모든 것처럼 보입니다 .
치고는:
cp -rT /this/source dir
이 -T
옵션은 사본이 dir/source
서브 디렉토리 를 작성하지 못하게합니다 . 오히려 /this/source
로 식별되고 dir
그에 따라 내용이 트리간에 매핑됩니다. 예를 /this/source/foo.c
들어가 dir/foo.c
아니라 계속 진행 합니다 dir/source/foo.c
.
그러나 이것은 다음 -T
을 사용 하는 옵션 없이 쉽게 수행 할 수 있습니다 .
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
의미 상 후미 점 구성 요소는의 하위 요소로 복사 dir
되지만 물론 "하위"는 이미 존재하므로 실제로 작성 될 필요가 dir
없으므로 그 결과는 /this/path
로 식별됩니다 dir
.
현재 디렉토리가 대상이면 제대로 작동합니다.
cp -r /this/tree/node/. . # node's children go to current dir
그것의 존재를 합리화 할 수있는 것만 으로 할 수있는 일이 -T
있습니까? (dot 디렉토리를 구현하지 않는 운영 체제에 대한 지원 외에 설명서에서 언급되지 않은 근거)
위의 도트 트릭은 GNU 정보 문서에서 언급 한 것과 동일한 경쟁 조건을 해결하지 못 -T
합니까?
.
트릭는 않습니다 만, 동시에 그것의 기본 이름을 이름을 변경하지 않을 경우, 파일을 복사 할 때 작업을!cp /path/to/file /target/dir/.
경우/target/dir/file
존재하고 디렉토리입니다, 당신은 같은 진단을 얻을! 그러나-T
경쟁 조건이 없으면 한 단계만으로 수행 할 수없는 작업을 보여주었습니다 . 파일을 복사하고 하위 디렉토리로 분류하지 않고 파일 이름을 변경하십시오.