Xargs är ett användbart kommando som fungerar som en bro mellan två kommandon, läser utmatning av en och utför den andra med de lästa artiklarna. Kommandot används mest i scenarier när en användare söker efter ett mönster, tar bort och byter namn på filer och mer.

I sin grundläggande form läser xargs information från standardinmatningen (eller STDIN) och kör ett kommando en eller flera gånger med de lästa artiklarna.

Som en illustration xargs kommandot xargs användaren att ange en fil eller ett katalognamn:

 xargs ls -l 

När ett namn har angetts skickas kommandot xargs den informationen till kommandot ls .

Här är resultatet av ovanstående xargs kommandot när jag körde det från min hemkatalog genom att ange "Dokument" (som är en underkatalog i min hemmapp) som en inmatning:

Observera att i detta fall xargs kommandot xargs kommandot ls med xargs som ett kommandoradsargument för att skapa en lista över filer som finns i den katalogen.

Medan kommandot xargs kan användas i olika kommandoradsoperationer, kommer det att vara väldigt användbart när det används med kommandot Sök. I den här artikeln kommer vi att diskutera några användbara exempel för att förstå hur xargs och find kan användas tillsammans.

Operationer som involverar flera filer

Antag att du vill kopiera innehållet i "ref.txt" till alla .txt-filer som finns i en katalog. Medan uppgiften annars kan kräva att du utför flera kommandon, xargs kommandot xargs tillsammans med find kommandot det enkelt.

Kör bara följande kommando:

 hitta ./-namn "* .txt" | xargs -n1 cp ../ref.txt 

För att förstå kommandot som visas ovan, låt oss dela upp det i två delar.

Den första delen är att find ./ -name "*.txt", som söker efter alla .txt-filer som finns i den aktuella katalogen.

Den andra delen xargs -n1 cp ../ref.txt tag i utgången från det första kommandot (de resulterande filnamnen) och överför det till kommandot cp (copy) en efter en. Observera att -n alternativet är avgörande här, eftersom det instruerar xargs att använda ett argument per utförande.

När det kombineras kommer det fullständiga kommandot att kopiera innehållet "ref.txt" till alla .txt-filer i katalogen.

Operationer med ett stort antal argument

En av de största fördelarna med att använda xargs är dess förmåga att hantera ett stort antal argument. När du till exempel raderar ett stort antal filer på en gång skulle kommandot rm ibland misslyckas med ett " Argument list too long " -fel. Det beror på att det inte bara kunde hantera en så lång lista av argument. Det här är vanligtvis fallet när du har för många filer i mappen som du vill radera.

Detta kan enkelt fixas med xargs . För att radera alla dessa filer, använd följande kommando:

 hitta ./rm-test/name "*" -print | xargs rm 

Operationer med mönstersökning

Programutvecklare såväl som systemadministratörer gör mycket mönstersökning medan de arbetar på kommandoraden. Exempelvis kan en utvecklare snabbt titta på projektfilerna som ändrar en viss variabel, eller en systemadministratör vill kanske se filerna som använder en viss systemkonfigurationsparameter. I dessa scenarier gör xargs tillsammans med find och grep det enkelt för dig.

Om du vill söka efter alla .txt-filer som innehåller "maketecheasier" -strängen, kör följande kommando:

 $ hitta ./namn "* .txt" | xargs grep "maketecheasier" 

Här är det output som kommandot gav på mitt system:

Klipp / kopiera operationer

Xargs, tillsammans med find kommandot, kan också användas för att kopiera eller flytta en uppsättning filer från en katalog till en annan. Om du exempelvis vill flytta alla textfiler som är mer än 10 minuter gamla från den aktuella katalogen till föregående katalog använder du följande kommando:

 hitta. -namn "* .txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../ 

Alternativet -I kommandoraden används av kommandot xargs att definiera en ersättningssträng som ersätts med namn som läses från utgången av sökkommandot. Här är ersättningssträngen {}, men det kan vara någonting. Till exempel kan du använda "fil" som ersättningssträng.

 hitta. -namn "* .txt" -mmin 10 | xargs -n1 -I 'fil' mv 'file' ./practice 

Hur man berättar xargs när man ska sluta

Antag att du vill lista detaljerna för alla .txt-filer som finns i den aktuella katalogen. Som redan förklarats kan det enkelt göras med följande kommando:

 hitta. -namn "* .txt" | xargs ls -l 

Men det finns ett problem; kommandot xargs kommer att köra kommandot ls även om kommandot Sök inte lyckas hitta någon .txt-fil. Här är ett exempel:

Så du kan se att det finns nej. txt- filer i katalogen, men det stoppade inte xargs från att exekvera ls kommandot. För att ändra detta beteende, använd alternativet -r kommandorads:

 hitta. -namn "* .txt" | xargs -r ls -l 

Slutsats

Även om jag har koncentrerat mig här om att använda xargs med find, kan den också användas med många andra kommandon. Gå igenom kommandos huvudsida för att lära dig mer om det, och lämna en kommentar nedan om du är osäker / fråga.