3

アプリケーションのシェル エグゼキュータに tar コマンドを渡しています。しかし、私の tar 構文が間違っているようです。(これは Windows (bsdtarコマンド) ですが、私の知る限り Linux と同じように動作します。必要に応じて Linux でテストすることもできます。)

tar ファイルにフル パスを保存せずに、ext で終わるすべてのファイルを tar gz しようとしています。

tar -cvzf test.tar.gz -C C:/mydir/toTar/ *.ext

エラーが発生します:

tar: *.ext: Cannot stat: No such file or directory

パス全体を指定できますが、tar にはC->mydir->toTar->. 結果ではなく、ファイルが必要mydirですtoTar

これまでのところ、私が望むものに近いのは.の代わりですが*.ext、それは他のものもタールします。これは明らかに望んでいません。

4

3 に答える 3

3

問題は*、シェルによって展開されるワイルドカード文字ですが、シェルをバイパスしてtar直接呼び出していることです。このtarコマンドは、文字どおりに名前が付けられた 1 つのファイルを探していますが、そのファイルは*.ext存在しません。

オプションは次のとおりです。

  1. 独自のコードでファイルのリストを展開し、そのリストを に渡しますtar
  2. 次のようなものを呼び出して、コードからシェルを呼び出します/bin/sh -c tar ...

オプション 2 を使用すると、セキュリティに影響する可能性があります。シェルがコマンドであると判断したものを検出すると、それを実行します。したがって、オプション 1 の方が安全ですが、どちらが適切かはあなた次第です。

于 2013-10-31T03:29:05.490 に答える
-1

パイプなどを使わずにシェル拡張を回避する方法はありません。

于 2014-05-30T19:07:27.487 に答える