내가 사용할 때
cp -R inputFolder outputFolder
결과는 상황에 따라 다릅니다 .
outputFolder
존재하지 않는 경우 생성되고 복제 된 폴더 경로는입니다outputFolder
.outputFolder
존재하는 경우 생성 된 클론은outputFolder/inputFolder
이 끔찍 좀 설치 스크립트를 만들려고하기 때문에, 사용자가 실수로 두 번 실행하는 경우, 그 것이다 outputFolder
모든 물건에 다시 한 번 생성 될 두 번째 실행에 처음 만들어 outputFolder/inputFolder
.
- 나는 항상 첫 번째 행동을 원합니다. 원본 옆에 형제로 복제본을 만듭니다.
cp
휴대용 으로 사용하고 싶습니다 (예 : MINGW는rsync
배송 되지 않음 )- 확인
cp -R --parents
했지만 디렉토리 트리까지의 경로를 다시 만듭니다 (복제본은outputFolder
아니지만some/path/outputFolder
) --remove-destination
또는--update
2가 아무것도 변경하지 않으면 여전히 내용이 복사됩니다.outputFolder/inputFolder
outputFolder
(폴더가 존재하지 않으면 …) 존재 여부를 먼저 확인 하거나 사용하지 않고이 작업을 수행 할 수 rm -rf outputFolder
있습니까?
합의 된 이식 가능한 UNIX 방식은 무엇입니까?
답변
대신 이것을 사용하십시오 :
cp -R inputFolder/. outputFolder
이것은 작동하는 것과 똑같은 방식으로 cp -R aaa/bbb ccc
작동합니다. ccc
존재하지 않으면 사본 bbb
과 그 내용 으로 만들어집니다 . 그러나 ccc
이미 존재 ccc/bbb
하면 사본 bbb
과 내용으로 만들어집니다.
거의 모든 경우에 bbb
대해 귀하의 질문에 언급 한 바람직하지 않은 행동을 제공합니다. 그러나,이 특정 상황에서이 bbb
그냥 .
, 그래서 aaa/bbb
정말 aaa/.
차례로 정말이다, aaa
그러나 다른 이름으로. 따라서이 두 가지 시나리오가 있습니다.
-
ccc
존재하지 않는다:명령
cp -R aaa/. ccc
수단 “을 만들ccc
및 내용 복사aaa/.
로를ccc/.
, 즉 복사aaa
로ccc
. -
ccc
존재한다 :명령
cp -R aaa/. ccc
수단 “의 내용 복사aaa/.
로를ccc/.
, 즉 복사aaa
로ccc
.
답변
폴더를 복사하지 말고 내용 만 복사하십시오.
## 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에서 이름이 a로 시작하는 파일을 건너 뜁니다 .
. 이를 피하려면 shopt -s dotglob
위 명령을 실행 하기 전에 실행할 수 있습니다 .
모두 -p
를위한mkdir
과 -R
에 대한cp
이 완벽하게 이식해야하므로 POSIX에 의해 정의됩니다.
답변
-T
옵션을 사용해보십시오 cp
. 이것은 GNU coreutils cp
버전 8.22에 있습니다. 그 밖에는 휴대 할 수 없습니다.
답변
당신은 또한 사용할 수 있습니다 rsync
:
rsync -uav inputFolder/ outputFolder/
(특히 첫 번째 슬래시 이후의 슬래시에 유의하십시오)
답변
내 의견으로는,보다 단순하고 휴대하기 쉬운 것은 없습니다 rm -rf outputFolder
. 그래서 나는 항상 그것을 고수합니다. 귀하의 질문이 다르다는 것을 이해하지만 이것이 최선의 방법이라고 생각합니다.
답변
명령 -t
옵션을 다음 cp
과 같이 사용할 수 있습니다 .
cp -R inputFolder -t outputFolder
이제 대상 폴더가 존재하지 않으면 오류가 발생합니다.
cp: failed to access ‘outputFolder’: No such file or directory
위의 명령은 inputFolder
내용뿐만 아니라 내용과 함께 복사 됩니다.
inputFolder
별표를 사용하는 동안 쉘 globbing을 사용하는 동안주의해야하기 때문에 내용을 복사 하기가 조금 까다로워집니다.
cp -R -t outputFolder/ -- inputFolder/*
이제 대상 폴더가 존재하지 않으면 오류가 발생합니다.
cp: failed to access ‘outputFolder’: No such file or directory
와 일하다 cp (GNU coreutils) 8.23