質問: 「tar」コマンドと「find」を組み合わせる方法 findコマンドはこの出力を提供します: [root @ localhost /]#find var/log/-iname anaconda。* var/log/anaconda.log var/log/anaconda.xlog var/log/anaconda.yum.log var/log/anaconda.syslog var/log/anaconda.program.log var/log/anaconda.storage.log tarと組み合わせると、次の出力が表示されます。 [root @ localhost /]#find var/log/-iname anaconda。* -exec tar -cvf file.tar {} \; var/log/anaconda.log var/log/anaconda.xlog var/log/anaconda.yum.log var/log/anaconda.syslog var/log/anaconda.program.log var/log/anaconda.storage.log しかし、tarファイルを一覧表示すると、単一のファイルのみが表示されます [root @ localhost /]#tar -tvf file.tar -rw ------- root/root 208454 2012-02-27 12:01 var/log/anaconda。 storage.log ここで何が間違っているのですか?xargsを使用すると、次の出力が得られます。 [root @ localhost /]#find var/log/-iname anaconda。* | xargs tar -cvf file1.tar 二番目の質問varの前に/と入力すると、find /var/logがこのメッセージを表示する理由tar:先頭の削除メンバー名からの `/ ' [root @ localhost /]#find/var/log/-iname anaconda。* -exec tar -cvf file.tar {} \; tar:メンバー名から先頭の「/」を削除 /var/log/anaconda.log tar:メンバー名から先頭の「/」を削除します /var/log/anaconda.xlog tar:先頭を削除しますメンバー名からの `/' /var/log/anaconda.yum.log tar:メンバー名からの先頭の`/'の削除 /var/log/anaconda.syslog tar:メンバー名から先頭の「/」を削除します /var/log/anaconda.program.log tar:メンバー名から先頭の「/」を削除します /var/log/anaconda.storage.log 単純な形で、次の2つの違いは何ですか?find var/logおよびfind /var/log
回答: 2つの方法があります-exec 働ける。 1つの方法でコマンドを何度も実行します-ファイルごとに1回。もう1つの方法では、すべてのファイルをパラメーターのリストとして含めて、コマンドを1回実行します。 -exec tar -cvf file.tar {} ';'は、各ファイルに対してtarコマンドを実行し、毎回アーカイブを上書きします。 -exec tar -cvf file.tar {} '+'はtarコマンドを1回実行し、見つかったすべてのファイルのアーカイブを作成します。