내가 사용할 때
cp -R inputFolder outputFolder
밝혀지다상황에 따라 다름:
outputFolder
존재하지 않는 경우 복제된 폴더 경로는 입니다outputFolder
.- 존재하는 경우
outputFolder
생성된 클론은outputFolder/inputFolder
이건 너무 무섭다, 일부 설치 스크립트를 생성하고 싶기 때문에 사용자가 실수로 두 번 실행하면 outputFolder
처음으로 생성되고 두 번째 실행에서는 모든 것이 다시 생성됩니다 outputFolder/inputFolder
.
- 나는 항상 첫 번째 동작을 원합니다. 즉, 원본 객체 옆에 복제본(형제로서)을 생성하는 것입니다.
- 내가 사용하고 싶은 것은 휴대용입니다. (예를 들어 MINGW는 배송
cp
되지 않습니다 .)rsync
- 확인했지만
cp -R --parents
디렉터리 트리의 경로가 다시 생성됩니다(따라서 복제본은 그렇지 않습니다outputFolder
)some/path/outputFolder
. --remove-destination
또는--update
사례 2에서 아무것도 변경되지 않으면 콘텐츠는 계속 복사됩니다.outputFolder/inputFolder
outputFolder
먼저 존재 여부를 확인 하거나(폴더가 없으면...) 사용하지 않고 이 작업을 수행할 수 있는 방법이 있습니까 rm -rf outputFolder
?
합의된 이식 가능한 UNIX 접근 방식은 무엇입니까?
답변1
대신 이것을 사용하십시오:
cp -R inputFolder/. outputFolder
이는 정확히 동일한 방식으로 작동합니다 cp -R aaa/bbb ccc
. ccc
존재하지 않는 경우 bbb
해당 내용의 복사본 으로 생성되지만 ccc
이미 존재하는 경우 해당 내용의 복사본 ccc/bbb
으로 생성 됩니다.bbb
이와 같은 거의 모든 bbb
상황에서 귀하의 질문에서 지적한 바람직하지 않은 동작이 발생합니다. 그러나 이 특별한 경우에는 " bbb
just"가 .
" really just" aaa/bbb
도 마찬가지입니다 aaa/.
. 이는 "really just aaa
"이지만 이름이 다릅니다. 따라서 다음과 같은 두 가지 상황이 있습니다.
ccc
존재하지 않는다:이 명령은 " 의 내용을
cp -R aaa/. ccc
생성하고 복사한다는 의미입니다 .ccc
aaa/.
ccc/.
aaa
ccc
ccc
존재합니까?이 명령은
cp -R aaa/. ccc
"콘텐츠를aaa/.
에 복사합니다ccc/.
. 즉,aaa
에 복사합니다ccc
.
답변2
폴더를 복사하지 말고 내용만 복사하세요.
## Create the target directory. The -p suppresses error messages
## if the directory already exists
mkdir -p outputFolder
## Copy the contents recursively, this will not recreate the parent
cp -R inputfolder/* outputfolder/
이렇게 하면 스크립트를 처음 실행할 때 대상 디렉터리가 생성되고 두 번째로 실행할 때 문제가 발생하지 않도록 할 수 있습니다.
Chris Down 은 bash에서 이름을 .
.shopt -s dotglob
둘 다-p
~을 위한mkdir
그리고-R
~을 위한cp
POSIX에 의해 정의되므로 완전히 이식 가능해야 합니다.
답변3
-T
select 를 시도해 보세요 cp
. 이는 GNU coreutils cp
버전 8.22에 존재하며 그 이상으로는 이식이 불가능할 수 있습니다.
답변4
-t
명령 옵션을 사용할 수 있습니다 cp
.
cp -R inputFolder -t outputFolder
이제 대상 폴더가 없으면 오류가 발생합니다.
cp: failed to access ‘outputFolder’: No such file or directory
위 명령은 inputFolder
내용뿐만 아니라 내용도 함께 복사됩니다.
내용 만 복사하려는 경우에는 약간 까다롭습니다 inputFolder
(별표*를 사용할 때 쉘 와일드카드를 사용할 때 주의해야 하기 때문입니다).
cp -R -t outputFolder/ -- inputFolder/*
이제 대상 폴더가 없으면 오류가 발생합니다.
cp: failed to access ‘outputFolder’: No such file or directory
그리고cp (GNU coreutils) 8.23