tar --exclude '*/logs' が機能しません。

tar --exclude '*/logs' が機能しません。

tarプロンプトから「logs」というフォルダをすべて除外してみました(すべてのログファイルをバックアップする必要はありません)。

簡略化されたプロンプトは次のとおりです。

tar -cvpf backup.tar servers --exclude='*/logs'

私のファイルシステムは次のとおりです。

/home/
    backup.sh
    servers/
        server1/
            logs/
                logfile1
                logfile2
        server2/
            logs/
                logfile1
                logfile2
        [server3 ... server100]/

スクリプトを実行するとログフォルダは除外されませんが、次のコマンドを実行すると除外されます。

tar -cvpf backup.tar servers --exclude=server1/logs --exclude=server2/logs (and so on for the rest of the servers)

それでは、各サーバーに対して除外コマンドをコピーして貼り付ける必要がなく、エラーが発生する可能性が高いようにコマンドを変更するにはどうすればよいですか。

答え1

GNU tar(v. 1.29)を使用するとtar cvf foo.tar --exclude "*/logs" servers

--excludeこのオプションは、コマンドラインの後ろにリストされているパスにのみ適用されるように見えるため、以下は除外されませんa/logs

tar cvf foo.tar servers/a --exclude "*/logs" servers/{b,c}

ただし、マニュアルページには明示的に言及されていません(ただし、概要には通常どおりファイルの前にオプションがリストされています)。

関連情報