/ 복사된 콘텐츠 폴더의 차이점. 그리고 /* 리눅스에서는

/ 복사된 콘텐츠 폴더의 차이점. 그리고 /* 리눅스에서는

내가 읽은 폴더에서 콘텐츠를 복사하려면 다음을 사용하세요.

cp -rfva ../foldersource/. ./

하지만 이것도 효과가 있다

cp -rfva ../foldersource/* ./

차이점이 있나요?

예를 들어, 다음을 사용하여 파일을 시작하려는 경우:

rm -rf ../foldersource/.

오류가 발생합니다.

rm:  rejet delete folder '.' or '..':

하지만 별표만 찍으세요

rm -rf ../foldersource/*

그렇다면 Asterisk가 어디에서나 더 나은 선택일까요?

답변1

이 두 가지 형태의 논쟁에는 근본적인 차이가 있습니다. 무슨 일이 일어나고 있는지 이해하는 것이 중요합니다.

인수는 그것 이든 다른 ../foldersource/.것이든 변경되지 않고 명령에 전달됩니다 . 단순히 디렉터리를 가리키는 표준 Unix 규칙과 달리 후행 점이 특수하거나 고유한 의미를 갖는지 여부는 명령에 따라 달라 집니다 .cprmrmcp

먼저 ../foldersource/*쉘에 의해 확장되었습니다.앞으로명령은 인수가 전달되어도 실행됩니다. 따라서 확장 버전 등은 rm본 적이 없습니다 . 운영 체제에서는 명령에 전달할 수 있는 인수 수를 일반적으로 몇 백 개로 제한하기 때문에 이는 중요합니다.../foldersource/*../foldersource/file1.ext ../foldersource/file2.ext ../foldersource/childfolder1

답변2

복사를 사용하면 대부분의 파일과 디렉터리가 에서 으로 cp -a source/* target/복사됩니다 . 특히 제외된 항목은 최상위 .txt 파일이 점()으로 시작하는 파일 일 수 있습니다 .sourcetarget.source

다음 파일(또는 디렉터리)을 고려하세요.source

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will not be copied

cp -a source/. target/다음을 사용하여 복사 source할 때.target

다음 파일(또는 디렉터리)을 고려하세요.source

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will be copied

을 사용하면 다음을 사용할 수 있습니다 bash.zshdotglob옵션*점으로 시작하는 파일과 디렉터리를 포함하도록 의미를 변경합니다 (옵션 yash도 있지만 dotglobglob 확장에 .및 를 포함하므로 ..유용성이 제한됩니다. 참조 FIGNORE='@(.|..)') ksh93.

흥미롭게도 cp -a source/. target/보증이 있습니다 .안 돼요구성 요소를 만듭니다 target/source. (한편, 이미 존재 cp -a source target/하는지 여부에 따라 두 가지 중 하나가 수행됩니다 target. 참조멱등성 방식으로 cp를 사용하여 폴더를 재귀적으로 복사하는 방법더 알아보기. )


삭제를 사용하면 rm -rf source/*점( )으로 시작하지 않는 파일과 디렉터리를 삭제합니다. 이미 언급한 설정에 따라 다릅니다. 디렉터리 자체는 삭제되지 않습니다.source.dotglobsource

이를 사용하여 삭제하려고 하면 rm -rf source/.실패합니다.다른 분들이 이미 설명하셨는데- POSIX는 마지막 구성 요소가 .또는 인 경로 삭제를 금지하기 때문입니다 ... 가장 가까운 것은 점( )으로 시작 하는지 여부에 관계없이 디렉토리와 모든 내용을 rm -rf source삭제한다는 것 입니다.source.

답변3

설명서에 다음과 같이 명확하게 명시되어 있으므로 허용되지 않기 rm -rf ../foldersource/.때문에 이 작업을 수행할 수 없습니다 .rm

마지막 파일 이름 부분이 '.' 또는 '..'인 파일을 삭제하려는 시도는 POSIX에 지정된 대로 프롬프트 없이 거부됩니다.

POSIX 매뉴얼에는 man 1p rm다음이 나와 있습니다.

파일 점 또는 점 점(dot-dot)이 피연산자의 기본 이름 부분(즉, 최종 경로 이름 부분)으로 지정되거나 피연산자가 루트 디렉터리로 확인되는 경우 rm은 표준 오류에 진단 메시지를 쓰고 더 이상 아무것도 하지 않아야 합니다. .

관련 정보