GNU tar(예: gtar
) 에서 --exclude
glob 옵션은 하위 디렉터리에만 일치하고 디렉터리 자체에는 일치하지 않습니다. 예를 들어 --exclude test-tar/a/b/*
는 내부의 모든 항목을 제외 b
하지만 b
자체는 제외하지 않습니다. 그러나 bsdtar
디렉토리 자체도 제외됩니다. 내 질문은 이 점에서 어떻게 bsdtar
GNU와 동일하게 행동할 수 있느냐는 것입니다.
다음은 문제를 보여주는 예제 스크립트입니다.
#!/usr/bin/env bash
echo -e "\nGiven an archive that looks like this:"
bsdtar -tf test.tgz
echo -e "\nExtract the archive excluding test-tar/a/b/* using gtar"
rm -rf test-tar
gtar -xzf test.tgz --exclude 'test-tar/a/b/*'
file test-tar/a/b
file test-tar/a/b/B.txt
echo -e "\nExtract the archive excluding test-tar/a/b/* using bsdtar"
rm -rf test-tar
bsdtar -xzf test.tgz --exclude 'test-tar/a/b/*'
file test-tar/a/b
file test-tar/a/b/B.txt
이는 다음을 출력합니다:
Given an archive that looks like this:
test-tar/
test-tar/a/
test-tar/a/A.txt
test-tar/a/b/
test-tar/a/b/B.txt
Extract the archive excluding test-tar/a/b/* using gtar
test-tar/a/b: directory
test-tar/a/b/B.txt: cannot open `test-tar/a/b/B.txt' (No such file or directory)
Extract the archive excluding test-tar/a/b/* using bsdtar
test-tar/a/b: cannot open `test-tar/a/b' (No such file or directory)
test-tar/a/b/B.txt: cannot open `test-tar/a/b/B.txt' (No such file or directory)
내 버전은 tar (GNU tar) 1.29
및 입니다 bsdtar 3.3.2
.
답변1
누구든지 이 질문에 대한 답을 찾고 있다면 매우 간단합니다. 후행 슬래시에 백슬래시를 추가하면 됩니다.
명령은 다음과 같습니다.
bsdtar -xzf test.tgz --exclude 'test-tar/a/b\/*'