Wie kann ich mit bsdtar „--exclude“ nur Unterverzeichnisse ausschließen?

Wie kann ich mit bsdtar „--exclude“ nur Unterverzeichnisse ausschließen?

In GNU tar (also gtar) --excludetrifft die Option mit einem Glob nur auf die Unterverzeichnisse zu, nicht aber auf das Verzeichnis selbst. Beispielsweise --exclude test-tar/a/b/*würde alles innerhalb von ausschließen b, nicht aber bsich selbst. bsdtarschließt jedoch auch das Verzeichnis selbst aus. Meine Frage ist, wie ich bsdtares in dieser Hinsicht genauso machen kann wie GNU?

Hier ist ein Beispielskript, das das Problem demonstriert:

#!/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

Dies gibt aus:

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)

Meine Versionen sind tar (GNU tar) 1.29und bsdtar 3.3.2.

Antwort1

Falls jemand eine Antwort auf diese Frage sucht, ist sie ganz einfach: Fügen Sie dem abschließenden Schrägstrich einen Backslash hinzu.

Ein Befehl würde so aussehen:

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

verwandte Informationen