Com bsdtar “--exclude”, como excluir apenas subdiretórios?

Com bsdtar “--exclude”, como excluir apenas subdiretórios?

No GNU tar (ou seja gtar), a --excludeopção com um glob corresponde apenas aos subdiretórios, mas não ao diretório em si. Por exemplo, --exclude test-tar/a/b/*excluiria qualquer coisa dentro de b, mas não bele mesmo. No entanto, bsdtartambém está excluindo o próprio diretório. Minha pergunta é como faço para bsdtaragir da mesma forma que o GNU nesse aspecto?

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

Isso produz:

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.29e bsdtar 3.3.2.

Responder1

Se alguém estiver procurando uma resposta para essa pergunta, é bem simples: adicione uma barra invertida à barra final.

Um comando ficaria assim:

bsdtar -xzf test.tgz --exclude 'test-tar/a/b\/*'

informação relacionada