POSIX pax
는 다음 -l
옵션을 사용 하여 읽기 + 쓰기 모드에서 사용합니다 .
pax -rwlpe -s /A/B/ dirA .
( -pe
GNU처럼, 복사됩니다이 경우 파일의 모든 가능한 특성 (전용 디렉토리) 보존 cp
의는 -a
않습니다).
이제는 표준 이지만 그 명령이 반드시 이식성 이 좋은 것은 아닙니다 .
첫째, 많은 GNU / Linux 기반 시스템은 pax
기본적으로 포함 되어 있지 않습니다 (비 선택적 POSIX 유틸리티 임에도 불구하고).
그런 다음 몇 가지 구현으로 여러 버그와 부적합으로 인해 해당 코드에 많은 문제가 발생합니다.
- 버그로 인해 Solaris 10
pax
(최소한) -rwl
은와 함께 사용할 때 작동하지 않습니다 -s
. 어떤 이유로 든 원래 경로와 복사 된 경로 모두에 대체를 적용하는 것 같습니다. 따라서 위의 link("dirB/file", "dirB/file")
대신에 일부 를 시도합니다 link("dirA/file", "dirB/file")
.
- FreeBSD에서는 symlink
pax
형식의 파일에 대한 하드 링크를 만들지 않습니다 (POSIX에서 허용되는 동작). 뿐만 아니라 심볼릭 링크의 대상 ( POSIX 에서는 허용 되지 않는 동작)에 대체를 적용합니다 . 예를 들어에 심볼릭 링크가 있으면에 링크 가 됩니다 .foo -> AA
dirA
foo -> BA
dirB
또한 내용이 $src
and에 저장된 임의의 파일 경로를 사용하여 동일하게 수행하려는 경우 내부 의 전체 디렉토리 구조 (존재하고 디렉토리 여야 함) $dst
를 pax -rwl -- "$src" "$dst"
작성하는 것이 중요합니다 . 예를 들어, 만약 이며 , 다음, 생성됩니다.$src
$dst
$src
foo/bar
$dst/foo/bar
대신 $dst
의 사본이 $src
되고 싶다면 가장 쉬운 방법은 다음과 같습니다.
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && pax -rwlpe . "$absolute_dst")
(위에서 언급 한 대부분의 문제를 해결할 수도 있지만 $dst
줄 바꿈 문자 로 끝나는 절대 경로이면 실패합니다 ).
이제는 GNU / Linux 시스템에서 도움이되지 않습니다 pax
.
pax
POSIX가 tar
and cpio
명령 의 기능을 병합하기 위해 만든 것을 주목하는 것이 흥미 롭습니다 .
cpio
A는 과거 POSIX의 발명에 반대 (1977) 유닉스 명령 및 아니라 GNU 구현 (하지가 pax
하나). 따라서 더 이상 표준 명령이 아니더라도 (SUSv2에 있음) 여전히 일반적이며 일반적으로 사용할 수있는 핵심 기능이 있습니다.
에 해당 pax -rwl
합니다 cpio -pl
. 하나:
cpio
인수와 달리 stdin에서 입력 파일 목록을 가져옵니다 (줄 바꿈으로 구분됨). 줄 바꿈 문자가있는 파일 이름은 지원되지 않습니다.
- 모든 파일 (일반적으로 당신은 그것을의 출력을 공급 지정할 수 있습니다
find
( find
와 cpio
) 같은 사람들에 의해 공동으로 개발되었다).
- 메타 데이터는 유지되지 않습니다 (일부
cpio
구현에는 일부를 유지하는 옵션이 있지만 이식성이없는 것은 없습니다).
그래서 cpio
:
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && find . | cpio -pl "$absolute_dst")
pax
FreeBSD에서 와 같이cp -a
심볼릭 링크를 하드 링크하지는 않습니다.