Het Gebruik van de xargs Opdracht op Linux

0
340
Fatmawati Achmad Zaenuri/Shutterstock

Moet string sommige Linux-commando ‘ s samen, maar één van hen niet accepteren doorgesluisd input? xargs kunt de uitvoer van de ene opdracht in en stuur het naar een andere opdracht als parameters.

Alle van de standaard Linux-hulpprogramma ‘ s hebben drie gegevensstromen met hen verbonden. Ze zijn standaard input stroom (stdin), de standaard output stroom (stdout), en de standaard fout stream (stderr).

Deze streams werken met tekst. Wij verzenden invoer (stdin) van een opdracht met tekst, en de respons (stdout) is geschreven naar het terminal venster als tekst. Ook foutmeldingen worden geschreven naar het terminal venster als tekst (stderr).

Een van de geweldige functies van Linux-en Unix-achtige operating systemen is de mogelijkheid om de pijp van de stdout uitvoer van de ene opdracht in de stdin ingang van een tweede opdracht. De eerste opdracht is niet de zorg die de output is niet van plan om een terminal venster, en de tweede opdracht niet schelen dat de invoer is niet afkomstig van een toetsenbord.

Hoewel alle van de Linux commando ‘s hebben de drie standaard streams, niet alle van hen te accepteren ander commando’ s stdout weer als input voor hun stdin. Dat betekent dat je geen pijp input voor hen.

xargs is een opdracht voor de bouw van de uitvoering van pijpleidingen met behulp van de standaard gegevensstromen. Door het gebruik van xargs kunnen we commando ‘ s zoals echo, rm, en mkdir accepteren standaard invoer als argumenten.

De xargs Opdracht

xargs zal accepteren doorgesluisd ingang. Het kan ook accepteren invoer uit een bestand. xargs gebruikt die als input parameters voor de opdrachten die we hebben verteld dat het om mee te werken. Als we niet vertellen xargs om te werken met een specifieke opdracht zal het standaard gebruik van echo.

Kunnen We dat gebruiken om aan te tonen hoe xargs zal altijd het genereren van een enkele regel van de output, zelfs met een multi-line-ingang.

Als we de -1 (lijst één bestand per regel) optie met ls, krijgen we een enkele kolom van de bestandsnamen.

ls -1 ./*.sh

Dit geeft een overzicht van de shell-script bestanden in de huidige directory.

We krijgen een enkele kolom zoals verwacht. Als we de pijp door xargs wat krijgen we?

ls -1 ./*.sh | xargs

De uitvoer wordt weggeschreven naar het terminal-venster, als één lange stroom van tekst.

Het is dit vermogen dat laten we xargs feed parameters in andere commando ‘ s.

Met xargs Met douche

We kunnen gebruik maken van xargs gemakkelijk wc tellen van de woorden, tekens en lijnen in meerdere bestanden.

ls *.pagina | xargs wc

Dit is wat er gebeurt:

  • ls worden de *.pagina bestanden en geeft de lijst om xargs.
  • xargs geeft de bestandsnamen naar het toilet.
  • wc behandelt de bestandsnamen als het ontvangen ze als command line parameters.

De statistieken voor elk bestand worden weergegeven samen met een algemeen totaal.

Met xargs Met Bevestiging

We kunnen gebruik maken van de -p (interactieve) optie om xargs aanwijzing voor ons een bevestiging dat we blij zijn voor hem om verder te gaan.

Als we langs een reeks van bestandsnamen aan te raken, door xargs, touch zal maken van de bestanden voor ons.

echo ‘een twee drie’ | xargs -p touch

De opdracht die wordt uitgevoerd wordt weergegeven en xargs wacht op ons om te reageren door te typen “y” of “Y” of “n” of “N”, en druk op Enter.

Als je gewoon op Enter drukt, dan wordt het behandeld als “n”. De opdracht wordt alleen uitgevoerd als u “y” of “Y”.

We gedrukt “y” in en drukt op Enter. We kunnen gebruik maken van ls om te controleren of de bestanden zijn gemaakt.

ls een twee drie

Met xargs Met Meerdere Commando ‘ s

We kunnen gebruik maken van meerdere commando ‘ s met xargs met behulp van de-I (eerste argumenten) optie.

Met deze optie definieert een “replace-string.” Waar het token voor het replace-string wordt weergegeven in de opdrachtregel, worden de waarden die werden geleverd om xargs zijn geplaatst.

Laten we gebruik maken van de boom commando om te kijken naar de submappen van de actuele map. De -d (directory) optie zorgt ervoor dat de boom om bestanden te negeren en alleen op mappen.

boom -d

Er is één submap genaamd “afbeeldingen”.

In een bestand met de naam “directories.txt” we hebben de namen van sommige mappen die we wensen te hebben gemaakt. We kunnen kijken naar de inhoud via cat.

kat directories.txt

We gaan dit gebruiken als de invoer van gegevens voor xargs. De opdracht we gaan is deze:

kat directories.txt | xargs -I % sh -c ” echo %; mkdir %’

Dit werkt zo:

  • kat directories.txt Deze duwt de inhoud van de directrories.txt bestand (alle nieuwe directory-namen) in xargs.
  • xargs -I %: Dit definieert een “replace-string” met de token “%”.
  • sh -c: Dit begint een nieuwe subshell. De -c (commando) het commando vertelt de shell te lezen opdrachten via de opdrachtregel.
  • ‘echo %; mkdir %’: elk van de “%” tokens worden vervangen door de directory namen die worden doorgegeven door xargs. Het echo commando wordt het afdrukken van de naam van de map; de opdracht mkdir wordt de directory.

De mappen staan één voor één.

We kunnen gebruik maken van de boom eenmaal meer om te controleren of de mappen zijn gemaakt.

boom -d

Het Kopiëren Van Bestanden Naar Meerdere Locaties

We kunnen gebruik maken van xargs ons toe te staan om bestanden te kopiëren naar meerdere locaties met één commando.

We gaan aan de pijp van de namen van twee mappen in xargs als de input-parameters. We vertellen xargs om slechts één van deze parameters tegelijk aan de opdracht werken.

In dit geval is de opdracht cp. Dus het effect is te noemen cp twee keer, telkens met een van de twee mappen zoals een command-line parameter. De xargs parameter waarmee dit gebeurt, is de-n (max. aantal) optie. We gaan te stellen dat dit één.

We zijn ook met behulp van de -v (verbose) optie met cp, zodat deze rapporten wat er gebeurt.

echo ~/Backups/ ~/Documenten/pagina-bestanden/ | xargs -n 1 cp -v ./*.pagina

De bestanden worden gekopieerd naar de twee mappen, één map tegelijk. cp rapporten elk bestand kopiëren actie zodat we kunnen zien ze nemen plaats.

Het verwijderen van Bestanden in Geneste Mappen

Als bestandsnamen spaties en vreemde karakters in zoals newline-characters— xargs niet in staat zal zijn om ze te interpreteren begrip. We kunnen overwinnen die probleem met behulp van de -0 (null-terminator) optie. Dit vertelt xargs gebruik van de null-teken als de laatste scheidingsteken voor bestandsnamen.

We gebruiken in dit voorbeeld. vinden heeft zijn eigen optie voor het omgaan met spaties en vreemde tekens in bestandsnamen. Het is de -print0 (volledige naam, null-teken) optie.

te vinden . -naam “*.png” -type f -print0 | xargs -0 rm -v -rf “{}”

Dit werkt zo:

  • te vinden . -naam “*.png”: zoek gaat zoeken in de huidige directory “.” voor objecten met namen die overeenkomen met “*.png” dat zijn files (type f).
  • -print0: namen worden beëindigd door een null-tekens en spaties en vreemde tekens worden verzorgd.
  • xargs -0: xargs gaat het ook om te overwegen bestandsnamen worden null-terminated, en spaties en vreemde tekens niet zal leiden tot problemen.
  • rm -v -rf “{}”: rm zal worden uitgebreid en een verslag van wat er gebeurt (-v). Het gaat om recursieve (-r) en kijk door de geneste submappen en bestanden verwijderen zonder te vragen (-f). De “{}” wordt vervangen door elke bestandsnaam.

Alle subdirectory ‘ s worden doorzocht, en de bestanden die overeenkomen met de zoekopdracht worden verwijderd.

Het Verwijderen Van Geneste Mappen

Laten we zeggen dat we willen verwijderen van een set van concentrische submappen. boom zal ons laten zien.

boom -d

te vinden . -naam “level_one” -type d printo | xargs -o rm -v -rf “{}”

Deze opdracht zoeken gebruiken om te zoeken in submappen in de huidige map. De zoektocht doel een map met de naam “level_one”. De directory-namen worden doorgegeven door middel van xargs rm.

De enige significante veranderingen tussen deze opdracht en de vorige opdracht, wordt de zoekterm de naam van de bovenste directory en type d vertelt zoeken om te zoeken naar mappen, niet voor bestanden.

De naam van de directory wordt afgedrukt als deze wordt verwijderd. Kunnen We controleren met de boom :

boom -d

Alle geneste submappen worden verwijderd.

Verwijderen van Alle Bestanden, met Uitzondering van Één Bestand Type

We kunnen gebruik maken van find, xargs en rm om alle bestanden te verwijderen met uitzondering van één soort die we willen behouden. Het is een beetje contra-intuïtief, maar we bieden ook de naam van het bestandstype wij wensen te houden, niet de naam van degene die we willen verwijderen.

De optie vertelt het vinden om terug te keren de namen van de bestanden die niet overeenkomen met de zoekopdracht. We zijn met de-I (eerste argumenten) optie met xargs eens te meer. Dit keer is het replace-string token we definiëren is “{}”. Dit zal zich gedragen precies hetzelfde als het replace-string token we eerder is gegenereerd, die toevallig een “%”.

te vinden . -type f -niet – name “*.sh” -print0 | xargs -0 -I {} rm -v {}

We kunnen controleren met ls. De enige bestanden in de map zijn degenen die aan de “*.sh” zoekpatroon.

ls -l

Het maken van een Archief Bestand Met Xargs

We zoeken gebruiken om te zoeken naar bestanden en laat ze door xargs te teer, het creëren van een archief-bestand.

We gaan zoeken in de huidige directory. De zoekopdracht is “*.pagina” dus gaan we op zoek naar “.pagina” bestanden.

te vinden ./ – naam “*.pagina” -type f -print0 | xargs -0 -tar -cvzf page_files.tar.gz

De bestanden worden weer gegeven zoals verwacht, omdat de archief-bestand is gemaakt.

De Gegevens Mediator

Soms moet je een beetje van de steiger als je het stapelen dingen samen. xargs overbrugt de kloof tussen de commando ‘s die kunnen pomp uit informatie en commando’ s die niet gebouwd te nemen.

Zowel xargs en vinden een groot aantal opties. Je bent aangemoedigd om hun man pagina ‘ s om meer te leren.

LEES VERDER

  • “Het Beveiligen van Uw Synology NAS van Ransomware
  • “Moet Je Betalen Als Je Geraakt wordt door Ransomware?
  • “Het Uitschakelen van Windows 10 Vervelend Focus Assist Meldingen
  • “Hoe Factory Reset een Router
  • “Waarom Zijn Bedrijven Nog Steeds Het Opslaan Van Wachtwoorden In Platte Tekst?