En GNU tar (es decir gtar
), la --exclude
opción con un globo solo coincide con los subdirectorios, pero no con el directorio en sí. Por ejemplo, --exclude test-tar/a/b/*
excluiría cualquier cosa dentro de b
, pero no b
a sí mismo. Sin embargo, bsdtar
también excluye el directorio en sí. Mi pregunta es ¿cómo hago para que bsdtar
actúe igual que GNU en este sentido?
Aquí hay un script de ejemplo que demuestra el 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
Esto produce:
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)
Mis versiones son tar (GNU tar) 1.29
y bsdtar 3.3.2
.
Respuesta1
Si alguien está buscando una respuesta a esta pregunta, es bastante simple: agregue una barra invertida a la barra diagonal final.
Un comando se vería así:
bsdtar -xzf test.tgz --exclude 'test-tar/a/b\/*'