次のディレクトリ構造があります。
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