Linux xargsコマンドの使用

Linux xargsコマンドの使用

1. 機能:

xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切られた引数に変換し、他のコマンドに渡すことができます。スペースは区切り文字として使用されるため、スペースが含まれているファイルまたは他の意味を持つ名詞を xargs が誤って判断する可能性があります。簡単に言えば、xargs は他のコマンドにパラメータを渡すフィルターであり、単一行コマンドを構築するための重要なコンポーネントの 1 つです。

xargs が使用される理由は、多くのコマンドがパラメータを渡すためのパイプ | の使用をサポートしていないためです。次に例を示します。

find /sbin -perm +700 |ls -l //このコマンドは、標準入力をlsのパラメータとして使用できないため、間違っています。 find /sbin -perm +700 |xargs ls -l //これは正しいです。

2. コマンド形式

xargs [オプション] [コマンド]

3. オプションの説明:

-0: 入力 stdin にバッククォート `、バックスラッシュ \、スペースなどの特殊文字が含まれている場合、xargs はそれを通常の文字に復元できます。 xargs のデフォルト オプション。
-e <フラグ>、-E <フラグ>、--eof=<eof-str>: eof はファイル文字列の終わりを意味します。フラグは、文字列、またはスペースで区切られた複数の文字列にすることができます。xargs がこのフラグを分析すると、動作を停止します。例2を参照してください。
-p: 引数が実行されるたびにユーザーに確認します。
-n <num>: コマンドの実行時に一度に使用される引数の数を num で指定します。デフォルトではすべてのパラメータが使用されます。
-t: 最初にコマンドを印刷してから実行します。
-a <ファイル>: ファイルから sdtin として読み取ります。
-i[replace-str]: xargs に、標準入力から読み取ったパラメータの代わりに {} を使用するように指示します。置換文字列 replace-str を指定できます。指定しない場合は、デフォルトは {} です。 POSIX 標準に準拠する -I を使用することをお勧めします。
-I [replace-str]: xargs が出力した各パラメータを後続のコマンドに個別に割り当てます。パラメータは、指定された置換文字列 replace-str に置き換える必要があります。つまり、replace-str はデフォルトにできず、明示的に指定する必要があります。{} $ @ などの記号を使用できます。主な機能は、xargs コマンドの後に複数のパラメータがある場合に、パラメータの位置を調整することです。たとえば、 find . -name "*.txt"|xargs -I {} cp {} /tmp/{}.bak.
-r: または --no-run-if-empty は、xargs の入力が空の場合、xargs は停止し、後続のコマンドを実行する必要はありません。-r は xargs のデフォルト オプションです。
-s <num>: コマンドラインの最大文字数。コマンド、スペース、改行を含む、xargs 後のコマンドラインの最大文字数を指します。各パラメータは、xargs に続くコマンドに個別に渡されます。例4を参照してください。
-L <line_num>: コマンドの実行ごとに、標準入力の最大行数をパラメータとして設定します。例5を参照してください。
-d <delim>, --delimiter=<delim>: xargs は、デフォルトでは標準入力を処理するときに改行文字とスペースを区切り文字として使用します。出力引数の区切り文字はスペースです。ここでは、xargs が標準入力を処理するときの区切り文字を変更します。
-x: は eXit を意味し、主に -s と一緒に使用されます。コマンド ラインの文字数が -s で指定された値より大きい場合、xargs は終了します。
-P: プロセスの最大数を変更します。デフォルトは 1 です。0 の場合は、可能な限り多くすることを意味します。このオプションはほとんど使用されておらず、その使用法は現時点では不明です。

4. 使用例

(1)シェルの特殊文字を通常の文字に戻す。

[b3335@MIC ~]$ echo '`0123`4 56789'|xargs -t echo
エコー `0123`4 56789 
`0123`4 56789

次の操作を直接実行すると、コマンド 01234 が見つからないというエラー メッセージが表示されます。これは、バッククォートによって 01234 がシェル内のコマンドとして実行されますが、01234 はコマンドではないためです。 -t は、最初にコマンドを印刷してから実行することを意味します。

[b3335@MIC ~]$ エコー `01234` 56789
-bash: 01234: コマンドが見つかりません
56789

(2)xargsがパラメータを読み込む際の終了マークをカンマで終わるように設定します。ここで注意すべき点は、終了マークは別のフィールド、つまりスペースまたは改行で区切られたフィールドである必要があるということです。

[b3335@MIC ~]$ echo 01234 , 56789|xargs -E ","
01234

(3)rmやmvなどのコマンドを使用して複数のファイルを同時に操作すると、「引数リストが長すぎます」というエラーメッセージが表示される場合があります。この場合、xargsを使用すると問題を解決できます。 xargs は標準入力の文字列を分離し、後続のコマンドにパラメータとして個別に渡します。たとえば、現在のディレクトリ内のすべてのファイルにサフィックスを追加します。

ls | xargs -t -i mv {} {}.bak

#条件を満たすファイルを選択 ls|grep -E "201701|201702|201703|201704|201705|201706|201707|201708|201709|201710" |xargs -i mv {} {}.bak

(4)コマンドラインの最大文字数を設定します。デフォルトでは、パラメータは実行のためにコマンドに 1 つずつ渡されます。

[b3335@MIC テスト]$ echo "01234 56789"|xargs -t -s 11
エコー 01234 
01234
エコー 56789 
56789

(5)コマンドパラメータとして毎回使用する標準入力の行数を設定します。デフォルトでは、標準入力のすべての行を1行にマージし、一度にコマンドに渡して実行します。

[b3335@MIC テスト]$ echo -e "01234\n56789\n01234" | xargs -t -L 2 echo 
エコー 01234 56789 
01234 56789
エコー 01234 
01234

(6)ファイルの内容をスペースで区切って同じ行に出力します。

//ファイル cat test.txt の内容を一覧表示します
ABCD
フギクルムノ

// 複数行の入力と 1 行の出力: 
cat テスト.txt | xargs
いいえ

(7)ps、grep、awk、killと組み合わせて、指定されたプロセスを強制終了する

ps -ef|grep spp|awk '{printf "%s ",$2}'|xargs kill -9

コマンドの説明:
ps -ef|grep sppは spp を含むプロセスを見つけるために使用され、 awk '{printf "%s ",$2,FNR}ターゲット プロセス ID を出力し、 xargs kill -9ターゲット プロセス ID をパラメーターとして kill -9 に渡してプロセスを強制終了します。

上記は Linux xargs コマンドの使用に関する詳細な内容です。Linux xargs コマンドの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • Linux の基礎: xargs コマンドの紹介
  • Linux での xargs コマンドの詳細な説明と xargs とパイプラインの違い
  • Linux xargsコマンドの詳細な紹介
  • Linux シェル スクリプト学習における xargs コマンドの使用法の詳細な説明
  • Linux で xargs コマンドを使用する詳細なチュートリアル

<<:  超詳細なMySQL使用仕様の共有

>>:  JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

推薦する

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

体験したい17 404ページ

404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...

Linux での vi (vim) の新しい使い方のまとめ

私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...

高性能なウェブサイトのための14のテクニック

オリジナル: http://developer.yahoo.com/performance/rule...

Reactでaxiosを使用してリクエストを送信する一般的な方法

目次Reactにaxios依存関係をインストールして導入するGETリクエストにaxiosを使用するa...

MySQL インフラストラクチャ チュートリアル: クエリ ステートメント実行プロセスの詳細な説明

序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...

CentOS 6.x のインストール時に発生するエラー「ディスク sda に BIOS RAID メタデータが含まれています」の解決方法

今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...

同期スクロールを実現するための複数のテーブル要素のサンプルコード

Element UIは、複数のテーブルを同時に水平および垂直にスクロールすることを実装します。 コー...

MySQLユーザーと権限管理の詳細な説明

この記事では、例を使用して MySQL ユーザーと権限の管理について説明します。ご参考までに、詳細は...

nginxとIISで使用できるSSL証明書を作成する

目次SSL証明書の作成1. 秘密鍵を生成する2. 証明書要求ファイルを生成する3. CRT証明書ファ...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

v-html レンダリング コンポーネントの問題

以前 HTML を解析したことがあるので、今日は Vue ドラッグ アンド ドロップを使用して、Ku...

MySQLクラスタのDockerデプロイメントの実装

シングルノードデータベースの欠点大規模なインターネットプログラムはユーザーベースが大きいため、アーキ...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

HTMLページ間で値を渡す問題の解決策

初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...