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

推薦する

Vue で Baidu Map を呼び出して経度と緯度を取得する

プロジェクトでは、現在地の緯度経度を取得したり、場所を検索して緯度経度情報を取得したりする必要があり...

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

メタタグコードを使用して、360 デュアルコアブラウザを互換モードではなく高速モードにデフォルト設定します。

あるウェブサイトでは、ユーザーが WebKit カーネルでページを開くことを期待して、HTML5 と...

kubernetes1.5.2 から kubernetes1.10 にアップグレードする際の主要な設定変更記録

この記事では、kubernetes1.5.2 から kubernetes1.10 にアップグレードす...

CSSレコードテキストアイコン配置のいくつかのソリューション

開発中に画像とテキストが 1 行に表示されることはよくあります。2 つのインライン要素を揃えるのは通...

Linux sedコマンドの使用

1. 機能紹介sed (Stream EDitor) は、コンテンツを 1 行ずつ処理するストリーム...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

Nginx タイムアウト設定の詳細な説明

最近、プロジェクトで nginx を使用し、バックエンドで Java を使用しました。バックエンドで...

MySQL 8.0.19 winx64 インストールチュートリアルと Windows 10 での初期パスワードの変更

この記事では、参考までにMySQL 8.0.19 winx64のインストールチュートリアルを紹介しま...

MySQL で sum 関数を使用する例のチュートリアル

導入今日は、MySQL の sum 関数の使い方を紹介します。この関数は、MySQL データベースを...

HTMLでvueとel​​ement-uiを直接参照する方法

コードは次のようになります。 <!DOCTYPE html> <html> ...

MySQLがトランザクション分離を実装する方法の簡単な分析

目次1. はじめに2. RC および RR 分離レベル2.1. RRトランザクション分離レベルでのク...

MySQL の日付型の単一行関数コードの詳細な説明

MySQL の日付型単一行関数: CURDATE()またはCURRENT_DATE()は現在の日付を...

...

MySQLサービスが起動しても接続されない問題の解決策

mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...