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の動作メカニズムの詳細な説明とイベントループについての簡単な説明

推薦する

Logrotate は 2 時間ごとに Catalina.out ログローテーションを実装します

1. Logrotateツールの紹介Logrotate はログファイル管理ツールです。Linux に...

MySQL 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)

1. 時間差関数(TIMESTAMPDIFF、DATEDIFF) MySQLを使用して時間差を計算...

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

MySQL の同時実行性の問題と解決策の分析

目次1. 背景2. テーブルロックによるクエリの遅延3. オンラインでテーブル構造を変更するとどのよ...

Dockerコンテナレイヤーの概念の詳細な説明

目次01 コンテナの一貫性02 レイヤーの概念03 レイヤードデザインの利点今日はコンテナ レイヤー...

MySQLのインストールと設定方法のグラフィックチュートリアル(CentOS7)

1. システム環境[root@localhost ホーム]# cat /etc/redhat-re...

HTML で Flash を読み込む方法 (2 つの実装方法)

最初の方法: CSSコード:コードをコピーコードは次のとおりです。 .b970-a{幅:970px;...

MySQLにおけるトランザクションの永続性実装原理の詳細な説明

序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...

LinuxでTomcatのポート番号を変更する方法

ここには複数の Tomcat があります。それらを同時に使用する場合は、ポート番号を別の番号に変更す...

Linuxでawkを使用する方法の詳細な説明

awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...

フロントエンド開発一般マニュアル(ツール、Webサイト、経験などを含む)

今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

nginx ロードバランシングを介して https にリダイレクトする方法

ウェブ上で証明書とキーをコピーするscp -rp -P52113 /application/ngin...