내가 읽은 폴더에서 콘텐츠를 복사하려면 다음을 사용하세요.
cp -rfva ../foldersource/. ./
하지만 이것도 효과가 있다
cp -rfva ../foldersource/* ./
차이점이 있나요?
예를 들어, 다음을 사용하여 파일을 시작하려는 경우:
rm -rf ../foldersource/.
오류가 발생합니다.
rm: rejet delete folder '.' or '..':
하지만 별표만 찍으세요
rm -rf ../foldersource/*
그렇다면 Asterisk가 어디에서나 더 나은 선택일까요?
답변1
이 두 가지 형태의 논쟁에는 근본적인 차이가 있습니다. 무슨 일이 일어나고 있는지 이해하는 것이 중요합니다.
인수는 그것 이든 다른 ../foldersource/.
것이든 변경되지 않고 명령에 전달됩니다 . 단순히 디렉터리를 가리키는 표준 Unix 규칙과 달리 후행 점이 특수하거나 고유한 의미를 갖는지 여부는 명령에 따라 달라 집니다 .cp
rm
rm
cp
먼저 ../foldersource/*
쉘에 의해 확장되었습니다.앞으로명령은 인수가 전달되어도 실행됩니다. 따라서 확장 버전 등은 rm
본 적이 없습니다 . 운영 체제에서는 명령에 전달할 수 있는 인수 수를 일반적으로 몇 백 개로 제한하기 때문에 이는 중요합니다.../foldersource/*
../foldersource/file1.ext ../foldersource/file2.ext ../foldersource/childfolder1
답변2
복사를 사용하면 대부분의 파일과 디렉터리가 에서 으로 cp -a source/* target/
복사됩니다 . 특히 제외된 항목은 최상위 .txt 파일이 점()으로 시작하는 파일 일 수 있습니다 .source
target
.
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
.zsh
dotglob
옵션*
점으로 시작하는 파일과 디렉터리를 포함하도록 의미를 변경합니다 (옵션 yash
도 있지만 dotglob
glob 확장에 .
및 를 포함하므로 ..
유용성이 제한됩니다. 참조 FIGNORE='@(.|..)'
) ksh93
.
흥미롭게도 cp -a source/. target/
보증이 있습니다 .안 돼요구성 요소를 만듭니다 target/source
. (한편, 이미 존재 cp -a source target/
하는지 여부에 따라 두 가지 중 하나가 수행됩니다 target
. 참조멱등성 방식으로 cp를 사용하여 폴더를 재귀적으로 복사하는 방법더 알아보기. )
삭제를 사용하면 rm -rf source/*
점( )으로 시작하지 않는 파일과 디렉터리를 삭제합니다. 이미 언급한 설정에 따라 다릅니다. 디렉터리 자체는 삭제되지 않습니다.source
.
dotglob
source
이를 사용하여 삭제하려고 하면 rm -rf source/.
실패합니다.다른 분들이 이미 설명하셨는데- POSIX는 마지막 구성 요소가 .
또는 인 경로 삭제를 금지하기 때문입니다 ..
. 가장 가까운 것은 점( )으로 시작 하는지 여부에 관계없이 디렉토리와 모든 내용을 rm -rf source
삭제한다는 것 입니다.source
.
답변3
설명서에 다음과 같이 명확하게 명시되어 있으므로 허용되지 않기 rm -rf ../foldersource/.
때문에 이 작업을 수행할 수 없습니다 .rm
마지막 파일 이름 부분이 '.' 또는 '..'인 파일을 삭제하려는 시도는 POSIX에 지정된 대로 프롬프트 없이 거부됩니다.
POSIX 매뉴얼에는 man 1p rm
다음이 나와 있습니다.
파일 점 또는 점 점(dot-dot)이 피연산자의 기본 이름 부분(즉, 최종 경로 이름 부분)으로 지정되거나 피연산자가 루트 디렉터리로 확인되는 경우 rm은 표준 오류에 진단 메시지를 쓰고 더 이상 아무것도 하지 않아야 합니다. .