저는 MacOS 컴퓨터를 사용하고 있습니다(tar 명령은 BSD인 것 같습니다). 내가 읽은 바에 따르면 -s
BSD 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~"
유효하고 이름 a
을 x/y
.
백슬래시 이스케이프( \/
, \057
또는 \x2f
)가 작동하지 않는 것 같으므로 패턴 자체에서 필요하지 않은 일부 문자를 구분 기호로 선택해야 합니다.