Извършвайте няколко операции в Linux с командата "xargs"
Xargs
е полезна команда, която действа като мост между две команди, като чете продукцията на едната и изпълнява другата с четените елементи. Командата се използва най-често при сценарии, когато потребителят търси шаблон, премахване и преименуване на файлове и др.
В основната си форма xargs
чете информация от стандартния вход (или STDIN) и изпълнява команда един или повече пъти с прочетените елементи.
Като илюстрация, следната команда xargs
очаква от потребителя да въведе име на файл или име на директория:
xargs ls -l
След като въведете име, командата xargs предава тази информация на ls
.
Ето изхода на гореспоменатата команда xargs
когато я изпълних от моята домашна директория, като въведете "Documents" (която е под-директория в моята Home folder) като вход:
Обърнете внимание, че в този случай командата xargs
изпълни ls
с името на директорията като аргумент на командния ред, за да създаде списък с файловете, които се намират в тази директория.
Докато командата xargs
може да се използва в различни операции на командния ред, тя идва много удобна, когато се използва с командата find
. В тази статия ще обсъдим някои полезни примери, за да разберем как xargs
и find
могат да бъдат използвани заедно.
Операции, включващи множество файлове
Да предположим, че искате да копирате съдържанието на "ref.txt" във всички .txt файлове, които се намират в директория. Докато в противен случай задачата може да изисква да изпълнявате няколко команда, командата xargs
, заедно с командата find
, го прави лесна.
Просто изпълнете следната команда:
намерете ./-име "* .txt" | xargs -n1 cp ../ref.txt
За да разберем командата, показана по-горе, нека я разделяме на две части.
Първата част е find ./ -name "*.txt"
, който търси всички .txt файлове, които се намират в текущата директория.
Втората част xargs -n1 cp ../ref.txt
ще xargs -n1 cp ../ref.txt
изхода на първата команда (получените имена на файлове) и ще я предаде на командата cp
(копие) един по един. Обърнете внимание, че опцията -n
е от решаващо значение тук, тъй като инструктира xargs
да използва един аргумент за изпълнение.
Когато се комбинират, пълната команда ще копира съдържанието на "ref.txt" във всички .txt файлове в директорията.
Операции, включващи голям брой аргументи
Едно от основните предимства на използването на xargs
е неговата способност да се справя с голям брой аргументи. Например, докато изтривате голям брой файлове наведнъж, командата rm
понякога ще се провали с грешка " Списък на аргументите твърде дълго ". Това е така, защото не може просто да се справи с такъв дълъг списък от аргументи. Това обикновено се случва, когато имате твърде много файлове в папката, която искате да изтриете.
Това може лесно да бъде коригирано с xargs
. За да изтриете всички тези файлове, използвайте следната команда:
намерете ./rm-test/ -name "*" -print | xargs rm
Операции, включващи търсене на шаблони
Софтуерните разработчици, както и системните администратори правят много търсене на шаблони, докато работят на командния ред. Например разработчик може да поиска бърз поглед върху файловете на проекта, които променят конкретна променлива, или системният администратор може да иска да види файловете, които използват определен системен параметър на системата. В тези сценарии, xargs
, заедно с find
и grep
, прави нещата лесни за вас.
Например, за да търсите всички .txt файлове, които съдържат "maketecheasier" низ, изпълнете следната команда:
$ намерите ./-име "* .txt" | xargs grep "maketecheasier"
Ето командата, произведена в моята система:
Изрязване / копиране
Xargs
, заедно с командата за find
, също могат да се използват за копиране или преместване на набор от файлове от една директория към друга. Например, за да преместите всички текстови файлове, които са повече от 10 минути от текущата директория в предишната директория, използвайте следната команда:
намирам . -name "* .txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
Опцията за командата -I
се използва от командата xargs
за дефиниране на заместващ низ, който се замества с имена, четени от изхода на командата find
. Тук заместващият низ е {}, но може да е всичко. Например, можете да използвате "файл" като заместващ низ.
намирам . -name "* .txt" -mmin 10 | xargs -n1 -Изправям 'файл' mv './practice
Как да кажа xargs кога да се откажете
Да предположим, че искате да изведете подробностите за всички .txt файлове, които се намират в текущата директория. Както вече беше обяснено, може лесно да се направи с помощта на следната команда:
намирам . -name "* .txt" | xargs ls -l
Но има един проблем; командата xargs
ще изпълни ls
дори ако командата find
не успее да намери файл .txt. Ето един пример:
Така че можете да видите, че няма. txt файлове в директорията, но това не спира xargs
от изпълнението на ls
. За да промените това поведение, използвайте опцията -r
командния ред:
намирам . -name "* .txt" | xargs -r ls -l
заключение
Въпреки че съм се съсредоточил тук, използвайки xargs
с find
, той може да се използва и с много други команди. Прегледайте главната страница на командата, за да научите повече за нея, и оставете коментар по-долу, ако имате съмнение / заявка.