No tar GNU (ou seja, gtar
), a opção --exclude
com um glob corresponde apenas aos subdiretórios, mas não ao próprio diretório. Por exemplo, --exclude test-tar/a/b/*
excluiria qualquer coisa dentro de b
, mas não b
em si. No entanto, bsdtar
está excluindo o diretório em si. Minha pergunta é como eu faço bsdtar
agir da mesma forma que o GNU a esse respeito?
Aqui está um exemplo de script que demonstra o problema:
#!/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
Esta saída:
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)
Minhas versões são tar (GNU tar) 1.29
e bsdtar 3.3.2
.