🐧 Команда Xargs в Linux

by itisgood
Π’ GNU / Linux Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ бСспрСцСдСнтно ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ популярны.
К Π½ΠΈΠΌ относится ΠΊΠΎΠΌΠ°Π½Π΄Π° xargs.
Π•Π΅ основноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ρ€Π°Π±ΠΎΡ‚Π° с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.
Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ описываСтся синтаксис этой ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°ΠΊ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Бинтаксис ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Xargs

Xargs ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ исходящиС Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎΠΌΠ΅Ρ€Π° процСссов ΠΈ Ρ‚. Π΄.) ΠΈ выполняСт с Π½ΠΈΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ манипуляции.

Однако ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ стандартный ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ Π½Π°Π±ΠΎΡ€Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

И, Ссли ΠΎΠ½Π° запускаСтся Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° echo ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ всСго Π½Π°Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ тСкста (Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° выполняСтся Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Ctrl + d).

Π’ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ синтаксис ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹:

[SOME_COMMANDS |] xargs [params] [command [initial-argument]]
SOME_COMMANDS (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΉΠΏ Π½Π° Π²Ρ‹Π²ΠΎΠ΄Π΅.

Π—Π°Ρ‚Π΅ΠΌ xargs выполняСт для Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² самом ΠΊΠΎΠ½Ρ†Π΅ послС ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π½ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π² Ρ‚ΠΎΠΌ мСстС, ΠΊΡƒΠ΄Π° ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:
ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ (BSD) Ρ„ΠΎΡ€ΠΌΠ°
Длинная (GNU) Ρ„ΠΎΡ€ΠΌΠ°
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
-0 –null
замСняСт символы ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки символом раздСлСния NULL (Β«\0Β»); Ρ…ΠΎΡ€ΠΎΡˆΠΎ сочСтаСтся с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ find
-l [max-lines] –maxlines[=max-lines]
выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа нСпустых строк Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², считанных ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ -L, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ max-lines являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ
-I replace
ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ символов (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ {} ΠΈΠ»ΠΈ []), вмСсто ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ слСва, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
-n max-args –max-args=max-args
выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ чтСния ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°, число ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
-p –interactive
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π°: ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ запросом ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
-r –no-run-if-empty
Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, Ссли список Π²Π²ΠΎΠ΄Π° пуст
-t –verbose
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ трассировки, показывая ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, выполняСмой ΠΏΠ΅Ρ€Π΅Π΄ запуском Π² стандартном ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ошибок
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, главная Π·Π°Π΄Π°Ρ‡Π° xargs – это ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π΄Π°Π½Π½Ρ‹Ρ… слСва, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ справа.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Xargs

Π§Π°Ρ‰Π΅ всСго ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· find.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ послСдняя ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· exec, это довольно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ связаны с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ find.

Π‘Ρ‚ΠΎΠΈΡ‚ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ xargs Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², содСрТащих ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· ситуации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -0.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Xargs

НайдитС всС Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .sh ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ трассировки скопируйтС ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ использованиС xargs cp destination/ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ эти Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ вставлСны Π² ΠΊΠΎΠ½Ρ†Π΅ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ прСдпринята ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /destination, Ρ‡Ρ‚ΠΎ являСтся абсурдом.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -I с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² cp мСсто, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ скопированныС Ρ„Π°ΠΉΠ»Ρ‹:

find . -name "*.sh" | xargs --verbose -I {} cp {} scripts/

Π’Ρ‹Π²ΠΎΠ΄ столбца

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ исходящиС Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцах.

Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ -n:

ls | xargs -n 2 | column -t

АрхивированиС ΠΈ сТатиС Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Xargs

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° find Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈ xargs отправляСт ΠΈΡ… для архивирования ΠΈ сТатия:
find . -name β€œ*.sh” | xargs tar jcf sh.tar.bz

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ старыС Ρ„Π°ΠΉΠ»Ρ‹

Π‘ΠΎΠ»Π΅Π΅ слоТная опСрация, которая удаляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ~/tmp, Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ созданы 7 Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅:

find ~/tmp -type f -name β€˜*’ -mtime +7 -print0 | xargs -0 rm -f

Π‘Π»ΠΎΠΊΠΈ IP адрСсов

ΠžΡ‡Π΅Π½ΡŒ удобная опСрация, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» IP, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:

cat ip_blacklist | xargs -I IP iptables -A INPUT -s IP -j DROP

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ старых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ядра

ПолСзная опСрация, ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ядра (ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ систСмам Π½Π° основС Debian ΠΈ Ubuntu):

dpkg -l linux-* | gawk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt -y purge

 

Loading

You may also like

Leave a Comment