파일을 복사하고 대상 디렉토리를 동시에 작성하려면 어떻게해야합니까?


20

내가 원하는 cp aaa/deep/sea/blob.psdbbb/deep/sea/blob.psd

어떻게하면 내가 복사본을해야합니까 deepsea디렉토리 아래에 존재하지 않는 bbb(가) 모두가 필요한 디렉토리 및 복사 파일을 만듭니다 복사 너무?

지금 나는
No such file or directory깊고 바다가 존재하지 않습니다.

나는 남자 도움 페이지와 다른 질문을 통해 보았지만 아무것도 나에게 튀어 나오지 않았다.

내가 가진 가장 가까운 rcp것은 디렉토리를 사용하는 것 입니다.

rcp -r aaa/deep/sea/ bbb/deep/sea/

이것은 전체 디렉토리와 내용을 복사하지만 하나의 파일 만 원합니다. 그러나 그렇게하려고하면cp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory

답변:


19

이러한 상황에서 다음 기능을 사용하십시오.

copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }

그것을 다음과 같이 사용하십시오

copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd

그런데 GNU cp에는 --parents옵션이 있습니다. 실제로 원하는 것에 가깝지만 정확하게는 아닙니다. 필요하지 않은 것 같은 디렉토리를
만듭니다 aaa. 그러나 먼저 aaa다음과 같이 cd 하고 복사 할 수 있습니다 .

cd aaa && cp --parents deep/sea/blob.psd ../bbb/

24

automake 와 같은 빌드 시스템에서 일반적 으로이 목적으로 사용되는 coreutilsinstall프로그램을 사용하는 것은 쉽습니다 .

install -D /path/to/source /path/to/destination

경로와 마찬가지로 경로의 모든 부분 을 install만듭니다 ( 참고 자료 참조) . 왜 당신이 그렇게하고 싶지 않은지 궁금 합니다. 전화 하고 매우 쉽습니다.mkdir -pman installmkdircp


2
나는이 질문에 대한 좋은 대답이 많이 있다고 생각하지만, 이것은 가장 휴대하기 쉽기 때문에 내 투표를 얻습니다. rsync대답은 단 1 디렉토리를 생성하며, pax일반적인 될 것 같지 않습니다.
Patrick

Mac -d대신에 사용하십시오 -D.
Matt M.

이 명령은 755( rwxr-xr-x) 권한을 가진 대상 파일을 작성하는데 , 이는 바람직하지 않습니다. -m스위치로 다른 것을 지정할 수는 있지만 파일 권한을 유지 하는 방법을 찾을 수 없었습니다. :(
törzsmókus

6

표준 (POSIX / Unix) 명령을 사용하면 다음과 같은 이점이 있습니다.

pax -rws ':^:dest/dir/:' file .

1
흥미 롭군 나는 전에 pax에 대해 들어 본 적이 없습니다. 나는 그 개념을 좋아하지만. 불행히도 POSIX에 있지만 기본적으로 설치하는 배포판은 거의 없습니다
Patrick

@Patrick- 이식성 문제 섹션 info tar어딘가 에서 끝까지 건너 뛰면 GNU 가 완전히 호환 된다고 주장합니다 . 어쨌든 나는 그 주장을 시험해 보지 않은 적이 없었습니다. tarpax
mikeserv

5

을 사용하여 수행하는 방법을 cp모르지만 다음을 사용하는 것이 가능합니다 rsync.

$ rsync sourcefile dir/

dir존재하지 않아도되는 디렉토리는 어디에 있습니까 ? 다른 명령을 사용하여 동일한 것을 달성하는 다른 많은 방법이 있습니다.


3
당신은 필요한 rsync -R디렉토리 계층 구조 보존
글렌 잭맨

@glennjackman 사실, '적절한'의 사용 rsync요구에 더 많은 옵션을하지만, 질문이었다 단순히 따라서, 내 짧은 대답 : 존재하지 않는 대상 디렉토리를 만드는 방법에 대한
mjturner을

1
최소한 GNU cp에는 --parents옵션이 있습니다.
peterph

2
@peterph 실제로, 그러나 당신은 대상 디렉토리의 이름에 제한되어 있습니다
mjturner

4
cd aaa
pax -rw deep/sea/blob.psd ../bbb

가지고 있지 않은 경우 pax(POSIX에서 명령하기 때문에 표준화 할 수있는 호환성이 너무 많은 cpio 및 tar의 표준 대체품으로 사용) cpio -p또는 tar -cf - … | tar -xf -대신 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.