1.はじめに
多くのLinuxのコマンドのようなパラメータを渡すパイプラインを、サポートしていないため、このコマンドを使用する理由
/ sbinに-perm +700見つける|のls -lコマンドが間違っています
xargsのlsが、それが意味-lということです| / sbinに-perm +700見つけます
典型的には、Linuxのコマンドを使用することができる|
次のコマンドの標準入力に接続されたコマンドSTDOUTに、エンドツーエンド。しかし、のようないくつかのコマンド、ls
、rm
コマンドラインパラメータからなどは、入力を受け付けます。あなたが出力したい場合は、この時点では、コマンドは難しく解決するには、渡されました。だから、そこに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