.*ディレクトリを含めるためにtarを使用する正しい構文

.*ディレクトリを含めるためにtarを使用する正しい構文

*/*/.thisdirectory/*tarアーカイブに一致するファイルを含めようとしています。正しい構文は何ですか?明らかにこれはそうではありません:

> find .
.
./bar
./bar/.a
./bar/.a/baz
./foo
./foo/.a
> tar --include "*[.]a*" -cvf a.tar .
>

ベストアンサー1

私はあなたがFreeBSD tar1を使用していると仮定します。それは私が知っている唯一の--include実装なので、オプションがあるからです。

これを渡すと、--include明示的に埋め込まれたファイルのみが検索されます。アーカイブを構築するときにディレクトリを巡回しないと、ディレクトリやその内容を含めることはできません。圧縮.が含まれていないため、.一意のコマンドライン引数は含まれず、空のアーカイブが得られます。

.aディレクトリにアクセスするには、すべての親ディレクトリを含める必要があります。問題は、これはその内容もすべて含まれることです。を使用して除外できますが、--exclude含めるポイント ディレクトリを除外しない除外パターンが必要です。現時点では--include役に立ちません。この--includeオプションは、アーカイブの作成にはあまり役に立ちません。既存のアーカイブの一部をコピーする場合に便利です。

tar --exclude='./*/[!.]*' -cvf a.tar .

最上位ディレクトリのすべてのファイルが含まれます。空でないコンテンツがあるディレクトリだけを含める方法はないと思います。

./*/.*ディレクトリだけをインポートして他のもの(特に親ディレクトリを除く)を取得するには、tarが再帰的にディレクトリを見つけることを許可するのではなく、tarに引数として渡す必要があります。

tar -cvf a.tar ./*/.[!.]*/

ディレクトリ(またはディレクトリへのシンボリックリンク)ではないファイルを含めるには、末尾のスラッシュを削除します。./*/..?*/含まれる名前で始まるディレクトリが..ある場合は追加します。

¹他のオペレーティングシステムで発生する可能性があります。

おすすめ記事