나는 cp aaa/deep/sea/blob.psd
하고 싶다bbb/deep/sea/blob.psd
deep
복사본 이 필요한 디렉터리를 생성하고 파일을 복사하도록 및 sea
디렉터리가 아래에 존재하지 않는 경우 어떻게 복사를 수행합니까 ?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
답변1
install
프로그램 을 이용하면 쉽습니다 .코어 유틸리티이는 일반적으로 다음과 같은 빌드 시스템에서 바로 이 목적으로 사용됩니다.자동 제작:
install -D /path/to/source /path/to/destination
install
생성하는 메모모두경로의 일부는 과 같습니다 . mkdir -p
를 참조하세요 man install
. 왜 포함하지 않았는지 궁금하네요왜당신은 그것을하고 싶어합니다. 전화 mkdir
하고 cp
매우 쉽습니다.
답변2
이러한 상황에서는 다음 기능을 사용해 보십시오.
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/
답변3
표준(POSIX/Unix) 명령을 사용하면 다음을 얻을 수 있습니다.
pax -rws ':^:dest/dir/:' file .
답변4
cd aaa
pax -rw deep/sea/blob.psd ../bbb
없는 경우 pax
(표준화하기에는 너무 많은 비호환성이 있는 cpio 및 tar의 표준 대체품으로 POSIX에서 의무화함) cpio -p
또는 tar -cf - … | tar -xf -
대신을 사용하십시오.