「ディレクトリの変更」オプションでtarワイルドカードを操作する方法

「ディレクトリの変更」オプションでtarワイルドカードを操作する方法

次のディレクトリ構造があります。

base/
   files/
   archives/
   scripts/

私はscripts/、一致するファイルを.gzip圧縮tarアーカイブresults.*.logに圧縮するために実行できるスクリプトが欲しいです。files/archives/

次のコマンドを試しています。

tar czfC ../archives/archive.tar.gz ../files results.*.log

しかし、私は理解しています

tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

しかし、

tar czfC ../archives/archive.tar.gz ../files results.a.log

期待どおりに動作します。返品

tar czf ../archives/archive.tar.gz ../files/results.*.log

ファイルにプレフィックスを追加しfiles/て警告を発行する以外は、私が望む方法で動作します。

tar: Removing leading `../' from member names

したがって、私の結論は、tarそのオプションを使用するとワイルドカードが正しく機能しないことです-C。これを簡単な方法で行う方法について提案がありますか?

答え1

より移植可能な方法で作成するには:

(cd ../files && tar cf - results.*.log) | 
  gzip -9 > ../archives/archive.tar.gz

答え2

「tarワイルドカード」はなく、ワイルドカードはシェルで行われます。シェルはtar -C somedirタスクがどこで完了するかわからずsomedir、すべてのglobは現在のディレクトリで拡張されます。

答え3

ついに使用しました。

tar czfC ../archives/archive.tar.gz ../files `find ../files/results.*.log -printf "%f\n"`

答え4

これを行う方法は、次のように書くことです。

#!/bin/sh

cd ../files
tar zcf ../archives/archive.tar.gz results.*.log
cd ../scripts

関連情報