tar "--exclude-from" ダブルスターワイルドカード

tar

一部のファイル/ディレクトリを除外するために、 "--exclude-from"でtarコマンドを使用するDebian 8システムにバックアップスクリプトを作成しました。

/home/www-data/sites/<some_string>log.txtこれはうまくいきますが、今日はまたは同じパスパターンを共有するいくつかのファイルを除外したいと思います/home/www-data/sites/<one_or_two_directories>/vendor

/home/www-data/sites/*log.txtファイルに追加しようとしましたが、tarが失敗し、stderrに次のエラーが表示されました。

tar: /home/www-data/sites/*log.txt: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

*orを使用しようとしたときに何か抜けましたか**

だから私は読んでUnixでは、ワイルドカードは通常プログラム自体では解釈されません。これはtar*も拡張しないことを意味します**

私が知っている限り、私の最後の手段はbashを使用してリストを拡張し、除外ファイルを呼び出す前に(まだ存在しない場合)除外ファイルに追加することですtar。よりクリーンな方法はありますか?

編集する

以下はスクリプトスニペットです。

# ...
broot=$(dirname "${PWD}")
i="${PWD}/list.include"
x="${PWD}/list.exclude"
o="$broot/archive.tgz"
tar -zpcf $o -T $i -X $x
# ...

除外ファイルです。

/etc/php5/fpm
/etc/nginx
/etc/mysql
/home/me/websites/*log.txt
/home/me/websites/**/vendor

目的は、「Webサイト」ディレクトリにあるすべてのログファイルと、「Webサイト」のサブディレクトリにあるすべての「ベンダー」ディレクトリを除外することです。

ベストアンサー1

シェルは引数でワイルドカード文字を拡張するため、ほとんどのアプリケーションではワイルドカード拡張を実行する必要はありません。ただし、tarの除外リストはする既存のシェルでサポートされているものと正確に一致するワイルドカードがサポートされています。微妙な違いがあるかもしれません。たとえば、tarは違いを区別できませんが、ksh、bash、およびzshは違いを区別できます***tarの場合、*文字を含むすべての文字を一致させることができるため、たとえば/階層内のすべてのレベルで*/.svn呼び出されたファイルは除外されます。ディレクトリ区切り文字と一致しない状況で使用できます.svntar --no-wildcards-match-slash*

たとえば、およびを/home/me/websites/*log.txt除外します。除外除外が除外しません。このオプションを使用して除外しないでください。/home/me/websites/log.txt/home/me/websites/foo-log.txt/home/me/websites/subdir/log.txt/home/me/websites/**/vendor/home/me/websites/one/vendor/home/me/websites/one/two/vendor/home/me/websites/vendor--no-wildcards-match-slash/home/me/websites/*log.txt/home/me/websites/subdir/log.txt/home/me/websites/**/vendor/home/me/websites/one/two/vendor

tar … --exclude='/home/www-data/sites/*include' …/home/www-data/sites名前が.で終わるファイルとディレクトリを除外しますinclude。引用符なしでエスケープできますが、これを作成する場合--exclude /home/www-data/sites/*include(シェルがtarワイルドカードを表示する前に拡張するため)、または一致しないワイルドカードのエラー信号を送信するシェル(たとえば、デフォルトのzsh)を使用している場合は不可能です。 、それはそうではありません。 おすすめ- 構成)。

このオプションには--exclude-fromファイル名が必要です。ファイルには1行に1つのパターンを含める必要があります。--exclude(次にパターンがオーム)と--exclude-from(次にパターンを含むファイル名がオーム)を混同しないでください。

おすすめ記事