Как с помощью bsdtar "--exclude" исключить только подкаталоги?

Как с помощью bsdtar "--exclude" исключить только подкаталоги?

В 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\/*'

Связанный контент