명령 순서
mkdir -p BASE/a/b/c && cp -a --target-directory=BASE/a/b/c /a/b/c/d
a/b/c
아래에 하위 디렉터리를 만들고 BASE
디렉터리 트리를 /a/b/c/d
에 복사합니다 BASE/a/b/c
.
한 가지 문제는 많은 반복이 필요하므로 오류가 발생한다는 것입니다.
이 작업을 캡슐화하기 위해 셸 기능을 롤아웃할 수 있습니다. 예를 들어 오류 확인/처리가 없는 스케치는 다음과 같습니다.
copytwig () {
local source=$1
local base=$2
local target=$base/$( dirname $source )
mkdir -p $target && cp -a --target-directory=$target $source
}
...하지만 이것이 "표준" Unix 유틸리티를 사용하여 수행될 수 있는지 궁금합니다(저는 "Unix 시스템에서 발견될 가능성이 높거나 적어도 Linux 시스템에서 발견될 가능성이 있음"으로 "표준"을 사용합니다).
답변1
사용 pax
(강제 POSIX 유틸리티이지만 일부 GNU/Linux 배포판에는 아직 기본적으로 설치되지 않음):
pax -s':^:BASE/:' -pe -rw /a/b/c/d .
(및 --target-directory
둘 다 -a
표준 cp
옵션이 아닙니다. 이는 GNU 확장입니다.)
-pe
(GNU와 유사 -a
) 을 사용하면 pax
디렉터리 구성 요소의 메타데이터(시간, 소유자, 권한...)도 복사하려고 시도합니다( BASE
메타데이터는 create를 사용하는 것과 동일함 mkdir BASE
).
답변2
디렉터리 구조를 유지하려면 --parents
스위치를 사용할 수 있습니다 .cp
mkdir BASE && cp --parents -a --target-directory=BASE /a/b/c/d
편집: 죄송합니다. Unix 솔루션을 요청하셨지만 이는 Linux에만 국한된 것 같습니다. :(