`mkdir -p BASE/a/b/c && cp -a -t BASE/a/b/c /a/b/c/d` 대신 "표준" 단일 명령을 사용하시겠습니까?

`mkdir -p BASE/a/b/c && cp -a -t BASE/a/b/c /a/b/c/d` 대신 "표준" 단일 명령을 사용하시겠습니까?

명령 순서

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에만 국한된 것 같습니다. :(

관련 정보