In GNU tar (also gtar
) --exclude
trifft 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 b
sich selbst. bsdtar
schließt jedoch auch das Verzeichnis selbst aus. Meine Frage ist, wie ich bsdtar
es 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.29
und 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\/*'