bsdtar "--exclude" を使用して、サブディレクトリのみを除外するにはどうすればよいですか?

bsdtar "--exclude" を使用して、サブディレクトリのみを除外するにはどうすればよいですか?

GNU tar (つまりgtar) では、--excludeglob 付きのオプションはサブディレクトリにのみ一致し、ディレクトリ自体には一致しません。たとえば、--exclude test-tar/a/b/*は の内部にあるものをすべて除外しますbが、b自体は除外しません。ただし、はディレクトリ自体も除外します。私の質問は、この点で を GNU と同じように動作さbsdtarせるにはどうすればよいかということです。bsdtar

問題を示すサンプル スクリプトを次に示します。

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

関連情報