xargsの原則&使用

1.はじめに

  多くのLinuxのコマンドのようなパラメータを渡すパイプラインを、サポートしていないため、このコマンドを使用する理由

  / sbinに-perm +700見つける|のls -lコマンドが間違っています

  xargsのlsが、それが意味-lということです| / sbinに-perm +700見つけます

  典型的には、Linuxのコマンドを使用することができる|次のコマンドの標準入力に接続されたコマンドSTDOUTに、エンドツーエンド。しかし、のようないくつかのコマンド、lsrmコマンドラインパラメータからなどは、入力を受け付けます。あなたが出力したい場合は、この時点では、コマンドは難しく解決するには、渡されました。だから、そこにxargs

  簡単に説明すると、xargs標準入力から、または続いてコールにパラメータとして、分離された空白キャリッジを追加することによって、入力を受け取ることができxargs、後続のコマンド

  xargsのデフォルトのセパレータ:スペースまたはキャリッジリターン

2.パラメータ

  全てたい.jpgもちろんの削除されたファイルは、することができます  rm *.jpgが、あなたはすべてのサブディレクトリに再帰的にファイルを操作したい場合は?

  これは、ことができます。

  • find . -name "*.jpg" | xargs rm

   このように、すべてのfind見つかったファイル名が引数として呼び出されるrmコマンド

    ほとんどの部分については、コマンドラインは問題ありませんが、いくつかは、ファイル名にスペースが含まれているなど、問題があるでしょう。

   xargs区切りの入力を受け、デフォルトのブランクは、複数の空間を含むファイル名をパラメータとして使用されている、彼らが渡されますrmだから、通常、ファイル名などの受注、これに対処する場合:

  • find . -name "*.jpg" -print0 | xargs -0 rm

       ここでは  -print0 、それは言うことですfind各出力の背面にコマンドを'\0'エンドとして。-0私たちは言われてxargs使用するように'\0'別の入力ではなく、空白に。これは、問題が発生回避できます。

      ここで再び別のケースを考え、仮定は削除さが、上で追加されたファイル名の接尾辞の要件を満たしたいと思っていません.bak行う方法を?この時間の必要性:

  • find . -name "*.jpg" -print0 | xargs -0 -I {} mv {} {}.bak

  どの-I {}伝えることでxargs、後者のコマンドを、{}プレースホルダは、実際のパラメータに置き換えられます。それがすべてです。

  他の有用なパラメータは次のとおり 
  -n 指定し、各パス上のいくつかのパラメータ 
  -d スライシング時は、デリミタ特定の入力内容を指定するために使用され 
  、参照他の複数のパラメータをman xargs、それを。

  • ファイルから-aファイルはsdtinとして読み込みます

    $猫1.TXT 
    AAA BBB CCC DDD
    A、B
    $ xargsの-a 1.TXTエコー
    AAA BBB CCC DDD AB

  • フラグが停止しているときに-eフラグ、ノートはいくつかの時間が-Eであってもよいことは、フラグがxargsの解析フラグを収容する空間フラグによって分離されなければなりません

    $ xargsの-E 'DDD' -a 1.TXTエコー
    AAA BBB CCC

    $猫1.TXT | xargsの-E 'DDD'エコー
    AAA BBB CCC

  • -n num個プラスナンバーバック、引数を指定して実行時の時点でのコマンドの数を表し、デフォルトではすべてのです。

    $猫1.TXT | xargsの-n 2エコー
    AAA BBB
    CCC DDD
    AB

  • -p操作は双方向性を持って、それぞれの実行は、ユーザーが要求したときに使用すると、1つの引数を実行すると、ユーザーが選択するためのすべての対話プロンプトをCOMAND

    $猫1.TXT | xargsの-pエコー
    エコーAAA BBB CCC DDD AB ... Y?
    AAA BBB CCC DDD AB
    $猫1.TXT | xargsの-pエコー
    ?エコーAAA BBB CCC DDD AB ... N

  • -tは、最初の印刷コマンドを表し、そして次に実行します。

    $猫1.TXT | xargsの-tエコー
    エコーAAA BBB CCC DDD AB 
    AAA BBB CCC DDD AB

  • -iまたは-I、それは、Linuxのサポートに依存xargsの名の各々、一般にライン毎に割り当てられ、{}、{}を用いてもよいです。

    $ lsの
    1.TXT 2.txt 3.txtたlog.xml
    $のls * .txtの| xargsの-t -i MV {} {} .BAK
    MV 1.TXT 1.txt.bak 
    MV 2.txt 2.txt.bak 
    MV 3.txt 3.txt.bak 
    $ LS
    1.txt.bak 2.txt。 BAK 3.txt.bakたlog.xml

  注、-Iは、文字を置き換えるかどうかを置換文字-i指定を指定する必要があります-オプションの、例えば:
    検索| xargsが-I {} {} $ D_PATHをcpは。
    そして
    見つける| xargsの-i CP {} $ D_PATH。

  注:{}内cshellとtcshellそれは、単一および二重引用符やバックスラッシュに必要であるか、わかりません。bashができません。
  検索/シェル-maxdepth 2 -name A -print | xargsの-t -i SED -i '1、I \ 111' '{}'

  • -rなしで実行-IF-空xargsのを防ぐことができますがパラメータ、ストップxargsの、退出を希望しない場合は、-rオプションを使用することができ、一度空の実行とxargsxargsのデフォルトパラメータに渡され、処理すべき引数は、存在しない場合空のパラメータ・エラーで実行するコマンドの後。

    エコー$ "" | xargsの-t MV
    MV 
    MV:ファイルの欠落オペランド
    。詳細情報に努め`MV --help」
    $エコー」「| xargsの-t -r#mvの終了
    をnum xargsの-sコマンドの背後にある最大のコマンドこと(スペースを含む)文字の行数 
    $ CATの1.txt.bak | xargsのエコー-s 9
    AAA
    BBB
    CCC
    DDD
    AB
    $ CATの1.txt.bak | xargsのエコー-s 4
    xargsの:CANは、単一の引数引数リストのサイズ制限に収まりません#length(エコー)4 =。
    $ CATの1.txt.bak | xargsのエコー-s 8つの。
    xargsは:。。。長すぎるライン引数#length(エコー)= 4、長さ(AAA)= 3、長さ(ヌル)= 1、total_length = 8

  • -L NUM行コマンド、-l、-L関数と標準入力コマンドから読み出し

    CATの1.txt.bak $ 
    AAA BBB CCCがddd
    AB&
    CCC
    DSDS
    xargsの-Lエコー4 | $ CATの1.txt.bakを。
    AAA BBB CCC CCCは、AB&DSDS dddを
    $ CATの1.txt.bakを| xargsのは、エコー1 -L。
    AAA BBB CCC DDD
    AB&
    CCC
    DSDSが
    DELIM区切り、デフォルトの区切りxargsのキャリッジリターンを-d、引数セパレータは変性セパレータはxargsのある空間は、あります

    $猫1.txt.bak 
    AAA @ BBB CCC @ DDD
    AB

    $猫1.txt.bakは| xargsが-d '@'エコー
    AAA BBB CCC DDD
    AB

    任意の行のバイト数がコマンド-sサイズフラグが指定より大きい場合-x出口手段は、停止実行xargsのは、主に使用-sと、-L -I -N -xオープンデフォルトパラメータを、コマンド
    -P変性最大プロセスの数は、デフォルトは1で、0はときである、それはできる限り多くのように。

 

3. xargsの和発見

  一致するファイルに対処するための-execコマンドオプションを見つける使用している場合、execの実行に一致するすべてのファイルに渡さコマンドを見つけます。しかし、いくつかのシステムは、コマンドの長さに制限は幹部に伝達することができているので、findコマンドの後に数分を実行するために、オーバーフローエラーが発生します。エラーメッセージは、通常は「あまりにも長い引数リスト」または「パラメータ列のオーバーフロー。」xargsのコマンドをここには、findコマンドと組み合わせる場合は特に便利です。その-execオプションとは異なり、すべてのxargsのにファイル転送コマンドと一致するコマンドを見つけ、xargsコマンドは、各コマンドファイルの一部だけを得るが、ありません。だから、最初に取得したファイルの最初の部分に対処し、次のバッチ、およびその継続することができます。

いくつかのシステムでは、各マッチング・ファイルを処理する-execオプションを使用して対応する処理を一度にパラメータとして実行ファイルに整合されていない開始する。ので、いくつかの場合にはあまりにも多くのプロセスが存在することになる、システム効率的ではない性能劣化の問題、および使用xargsのコマンド唯一​​のプロセスです。xargsのコマンドを使用する場合に加えて、かどうかはパラメータ、収集パラメータ及びコマンドおよび対応するカーネル調整パラメータに基づいて決定されるオプションのそれぞれの数を得るために、すべてのパラメータ、又はバッチでを取得するための時間です。

入力パラメータとしてCommand2をCommand2をが、出力の内容のみ|のCommand1:パイプは、例えば、別のコマンドへの入力としてコマンドの出力を通過させることです。見つける。-name -print印刷「INSTALL.LOG」この文字列がinstall.logにあるから、パイプを使用する場合にのみ、その後、command2のが唯一のinstall.logに文字列を使用することができ、ファイルとして処理されるようにそれを取ることができません。

もちろん、xargsのにこのcommand2の追加。xargsが書かれた文書を見つけるために検索を操作できるようにすることです。これは、パイプの文字列をすることができ、その後の実装にコマンドファイルとして来ました。
たとえば:
。| CAT $ -name「install.logに」-print検索
文字列が対処するのと同様に、パイプから来る./install.log#表示内容
$ -name「install.logに」-print見つけます。 | xargsの猫の
AAAAAAは#パイプラインは、猫を実行するには、ファイルの内容として来ました。install.logにが存在は、そのファイルの内容を印刷する場合つまり、コマンドが実行されます。
xargsのコマンドは、findコマンドを使用する方法を見てみましょう、といくつかの例を与えます。

1、すべての現在のディレクトリに見て、ユーザが読んでいるファイル、書き込み、および実行権限を、対応する書き込み権限の回復:
#-perm検索-7 -print | xargsのはchmod OW。
すべての2通常のファイル、システムの外観を、その後、彼らはに属している種類のファイルのどのようなテストにコマンドxargsのを使用する
。ファイルをxargsの|#-print F型検索
空:./liyao

3は、あなたが得ることが、あまりにも多くのrmファイルの削除するには、エラーメッセージを試す:/ binに/ RM引数リストをあまりにも長いxargsので、この問題を回避するために。
$検索〜-name「* .logの」-print0 | xargsの-i - 0 RM -f {}

4、すべてのJPGファイルを見つけ、それを圧縮
#検索/ -name * .JPG -type F -print | xargsのタール-cvzf images.tar.gz
5、外付けハードドライブにすべての画像ファイルをコピー 
#1 LS * .JPG | xargsの-n1 -i CP {} /外部ハードドライブ/ディレクトリ

 

参考ます。https://www.cnblogs.com/yorkyang/p/6294879.html

おすすめ

転載: www.cnblogs.com/yoyowin/p/12066935.html