tar 아카이브 사용 시 pwd의 모든 내용을 하위 디렉터리로 이동/변환

tar 아카이브 사용 시 pwd의 모든 내용을 하위 디렉터리로 이동/변환

저는 MacOS 컴퓨터를 사용하고 있습니다(tar 명령은 BSD인 것 같습니다). 내가 읽은 바에 따르면 -sBSD tar의 스위치는 GNU tar의 스위치와 동일합니다 --transform.

나는 다음 명령을 가지고 있습니다 :

tar -zcf foo.tgz -s /^"$(pwd)"/"$(pwd)/package"/ "$(pwd)"

내가 하고 싶은 것은 foo.tgz라는 파일에 모든 것을 보관하고 "package"라는 하위 디렉토리에 모든 것을 넣는 것입니다.

다음 오류가 발생합니다.

tar: 잘못된 대체 플래그 a

나는 -s 옵션이 올바르지 않다고 생각하지만 그것이 무엇인지는 확실하지 않습니다.

궁극적으로 출력이 foo.tgz라는 파일이 아닌 stdout에 기록되기를 원하므로 해당 파일도 업데이트하고 싶다면 그렇게 해주세요. 감사합니다.

답변1

대체 패턴 및 대체에 대한 구분 기호로 사용되는 슬래시와 디렉터리 구분 기호로 사용되는 슬래시 간의 암시적 충돌에 유의하세요. 예를 들어 현재 디렉토리가 다음과 같은 경우 /foo/bar제공하는 문자열 tar은 다음과 같습니다.

/^/foo/bar//foo/bar/package/

패턴 은 대체품으로 ^간주 foo되고 나머지는 플래그로 간주됩니다. 여기서는 다음과 같은 오류가 발생합니다 b.

tar: Invalid replacement flag b

다행히 tar내 Mac에서는 슬래시 구분 기호 대신 다른 문자를 허용하므로 예를 들어 ~전체 경로 이름을 패턴에 더 쉽게 넣을 수 있습니다. 예를 들어 -s "~^a$~x/y~"유효하고 이름 ax/y.

백슬래시 이스케이프( \/, \057또는 \x2f)가 작동하지 않는 것 같으므로 패턴 자체에서 필요하지 않은 일부 문자를 구분 기호로 선택해야 합니다.

관련 정보