xargs(1)

Från Wiki.linux.se
Version från den 29 augusti 2025 kl. 17.54 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

xargs(1)

NAMN

xargs - bygg och exekvera kommandorader från standard in

SYNOPSIS

xargs [flaggor] [kommando [initial-argument]]

BESKRIVNING

Denna manualsida dokumenterar GNU-versionen av xargs. xargs läser objekt från standard in, avgränsade av blanksteg (som kan skyddas med dubbla eller enkla citattecken eller ett omvänt snedstreck) eller radbrytningar, och exekverar kommando (standard är echo) en eller flera gånger med eventuella initial-argument följt av objekt lästa från standard in. Tomma rader på standard in ignoreras.

Kommandoraden för kommando byggs upp tills den når en systemdefinierad gräns (om inte flaggorna -n och -L används). Det angivna kommando kommer att anropas så många gånger som behövs för att använda upp listan av indataobjekt. I allmänhet kommer det att bli mycket färre anrop av kommando än antalet objekt i indata. Detta ger ofta betydande prestandafördelar. Vissa kommandon kan också köras parallellt; se flaggan -P.

Eftersom Unix-filnamn kan innehålla blanksteg och radbrytningar är detta standardbeteende ofta problematiskt. Filnamn som innehåller blanksteg och/eller radbrytningar behandlas felaktigt av xargs. I dessa situationer är det bättre att använda flaggan -0, som förhindrar sådana problem. När denna flagga används måste det program som producerar indata för xargs också använda en nollteckenavgränsare. Om programmet är GNU find används flaggan -print0 för detta ändamål.

Om någon körning av kommandot avslutas med statuskod 255 stoppar xargs omedelbart utan att läsa ytterligare indata. Ett felmeddelande skrivs ut på stderr när detta händer.

FLAGGOR

Flagga Beskrivning
-0, --null Indataobjekt avslutas med ett nolltecken istället för blanksteg. Citat och omvänt snedstreck är inte speciella (varje tecken tas bokstavligen). Inaktiverar end-of-file-strängen. Användbart när indataobjekt kan innehålla blanksteg, citattecken eller omvänt snedstreck. GNU find och (från Issue 8, POSIX) -print0 producerar sådan indata.
'-a file, --arg-file=file Läs indataobjekt från file istället för standard in. Om du använder denna flagga förblir stdin oförändrad när kommandon körs, annars omdirigeras stdin från /dev/null.
--delimiter=delim, -d delim Indataobjekt avslutas av den angivna avgränsaren. Avgränsaren kan vara ett enda tecken, en C-stils escape (t.ex. \n), eller en oktal/hexadecimal escape-kod. Multibyte-tecken stöds inte. Inaktiverar end-of-file-strängen. Bättre att använda --null om möjligt.
-E eof-str Sätt end-of-file-strängen till eof-str. Om den förekommer som en rad ignoreras resten av indatan. Standard: ingen end-of-file-sträng.
-e[eof-str], --eof[=eof-str] Synonym för -E. Om eof-str utelämnas används ingen end-of-file-sträng. Flaggan är inte POSIX-kompatibel.
-I replace-str Ersätt förekomster av replace-str i initial-argumenten med objekt från standard in. Separatortecken är radbrytning istället för blanksteg. Implicerar -x och -L 1.
-i[replace-str], --replace[=replace-str] Synonym för -I. Om replace-str utelämnas används {}. Flaggan är föråldrad; använd -I istället.
-L max-lines Använd högst max-lines icke-tomma rader per kommando. Efterföljande blanksteg logiskt fortsätter raden. Implicerar -x.
-l[max-lines], --max-lines[=max-lines] Synonym för -L. max-lines är valfritt. Standard = 1. Flaggan är föråldrad (POSIX föreskriver -L istället).
-n max-args, --max-args=max-args Använd högst max-args argument per kommando. Färre används om storleken (se -s) överskrids, om inte -x används (då avbryts xargs).
-P max-procs, --max-procs=max-procs Kör upp till max-procs processer samtidigt. Standard = 1. 0 = så många som möjligt. Möjlighet att ändra antal via signaler SIGUSR1/SIGUSR2. Notera: utdata kan blandas utan låsning.
-o, --open-tty Öppna stdin som /dev/tty i barnprocessen innan kommandot körs. Användbart för interaktiva program.
-p, --interactive Fråga användaren innan varje kommando körs. Kör bara om svaret börjar med y/Y. Implicerar -t.
--process-slot-var=name Sätt miljövariabeln name till ett unikt värde i varje barnprocess.
-r, --no-run-if-empty Kör inte kommandot om indata är tom. Standard: körs ändå en gång.
-s max-chars, --max-chars=max-chars Använd högst max-chars tecken per kommando, inklusive kommandot och nolltecken. Systemberoende gränser gäller.
--show-limits Visa gränser för kommandoradens längd. Använd /dev/null som indata för att bara visa.
-t, --verbose Skriv ut kommandoraden innan exekvering.
-x, --exit Avbryt om storleken överskrider (se -s).
-- Markerar slutet på flaggorna. Efterföljande argument behandlas som operander även om de börjar med -.
--help Visa hjälpsammanfattning.
--version Visa versionsnummer.

Obs: --max-lines (-L, -l), --replace (-I, -i) och --max-args (-n) är ömsesidigt uteslutande. Den senast angivna gäller, undantaget att -n 1 ignoreras efter --replace.

EXEMPEL

find /tmp -name core -type f -print | xargs /bin/rm -f

Hittar och tar bort filer som heter core i eller under /tmp. Felaktigt vid filnamn med blanksteg eller radbrytningar.

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

Samma som ovan, men hanterar filnamn med blanksteg eller radbrytningar korrekt.

find /tmp -depth -name core -type f -delete

Mer effektiv metod, utan behov av fork(2)/exec(2).

cut -d: -f1 < /etc/passwd | sort | xargs echo

Genererar en kompakt lista över alla användare på systemet.

AVSLUTNINGSSTATUS

xargs avslutas med följande statuskoder:

  • 0 – vid framgång
  • 123 – om något kommando avslutade med status 1–125
  • 124 – om kommandot avslutade med status 255
  • 125 – om kommandot dödades av signal
  • 126 – om kommandot inte kan köras
  • 127 – om kommandot inte hittades
  • 1 – om något annat fel inträffade

Statuskoder >128 används av skalet för att indikera död p.g.a. signal.

STANDARDER

  • -0 inkluderas i POSIX Issue 8.
  • -l och -i fanns i POSIX 1997 men inte i 2004. Använd -L och -I.
  • -o är en BSD-kompatibilitetsutvidgning.
  • --show-limits kan användas för att se aktuella gränser.

HISTORIK

Programmet xargs uppfanns av Herb Gellis på Bell Labs.

BUGGAR

  • Det är omöjligt att använda xargs helt säkert eftersom det finns ett tidsglapp mellan filuppräkning och användning. Andra användare kan manipulera filsystemet under detta intervall.
  • Användning av -I innebär en övre gräns på radlängden. Kan delvis kringgås med -s och extra xargs-anrop.
  • Fram till och med version 4.9.0 kunde xargs -P avsluta medan barnprocesser fortfarande körde, om någon avslutade med status 255.

FELRAPPORTERING

COPYRIGHT

Copyright © 1990–2025 Free Software Foundation, Inc. Licens GPLv3+: GNU GPL version 3 eller senare <https://gnu.org/licenses/gpl.html>. Fri programvara: du får ändra och distribuera. Ingen garanti.

SE ÄVEN

find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7)

Fullständig dokumentation: <https://www.gnu.org/software/findutils/xargs> eller lokalt via: info xargs

COLOPHON

Denna sida är en del av projektet findutils. Projektinformation: <http://www.gnu.org/software/findutils/> Buggrapporter: <https://savannah.gnu.org/bugs/?group=findutils> Denna sida hämtades från projektets Git-repo den 2 februari 2025.

xargs – snabbguide och 20 praktiska exempel

Vad är xargs?

<xargs> läser argument från standard in (stdin) och bygger kommandorader av dem för att köra ett visst kommando effektivt. Det används ofta ihop med verktyg som

find

,

grep

och

printf

för att batcha eller parallellisera arbete.

Varför använda xargs?

  • **Prestanda:** färre processstarter än att loopa i shell.
  • **Robusthet:** hanterar långa listor av argument bättre än enkel kommandosubstitution.
  • **Flexibilitet:** kan styra hur många argument som skickas per körning, ersätta platshållare m.m.

Syntax

# Grundform
xargs [flaggor] [kommando [kommandoflaggor]]

# Med platshållare
xargs -I {} kommando ... {}

Vanliga flaggor

Flagga Beskrivning
-n N
Skicka högst N argument per kommandokörning (”batchstorlek”).
-I {}
Använd platshållaren {} där indata ska injiceras (en körning per rad).
-0
Läs NUL-separerad indata (säker för blanksteg/nyrader i filnamn). Kombinera med
find -print0
.
-r
(GNU)
Kör inte kommandot om indata är tom (”no-run-if-empty”).
-p
Fråga användaren före varje körning (interaktiv bekräftelse).
-t
Skriv ut kommandot som körs (”trace”) – bra för felsökning.
-d SEP
Använd egen avgränsare i stället för blanksteg/nyrad (t.ex.
-d '\n'
).
-P N
(GNU)
Kör upp till N kommandon parallellt (parallellism).

Tips & fallgropar

  • **Filnamn med mellanrum/konstiga tecken:** använd
    find ... -print0 | xargs -0 ...
    .
  • **Tom indata:** lägg till
    -r
    (GNU) för att undvika ”nakna” körningar.
  • **När använda
    -I {}
    ?** När argument inte ska ligga sist eller när du behöver fler än ett förekomstställe.
  • **Parallellitet:**
    -P
    kan ge stor fartvinst vid nät-/CPU-tunga jobb. Var uppmärksam på race conditions.
  • **Alternativ till xargs:**
    find ... -exec ... {} +
    batchar också argument, medan
    -exec ... {} \;
    kör en och en.

Exempel på användning av xargs

Tabellen nedan visar 20 praktiska exempel på hur man kan använda kommandot

xargs

i Linux.

Nr Kommando Förklaring
1
echo "file1 file2 file3" | xargs rm
Tar bort filerna file1, file2 och file3.
2
find . -name "*.txt" | xargs wc -l
Räknar antalet rader i alla .txt-filer i katalogträdet.
3
ls *.jpg | xargs -n1 -I {} cp {} /backup/
Kopierar varje .jpg-fil till /backup/.
4
cat urls.txt | xargs wget
Laddar ner alla URL:er listade i urls.txt.
5
find . -type f -print0 | xargs -0 du -sh
Visar storleken på alla filer, säkert även med mellanslag i filnamn.
6
cat list.txt | xargs -n2 echo
Skriver ut två ord per rad från list.txt.
7
find /var/log -name "*.log" | xargs gzip
Komprimerar alla loggfiler i /var/log.
8
echo "one two three" | xargs -n1
Skriver ut varje ord på egen rad.
9
grep -rl "TODO" . | xargs sed -i 's/TODO/DONE/g'
Ersätter texten "TODO" med "DONE" i alla matchande filer.
10
ls | xargs -n1 basename
Visar filnamnen utan katalogdel.
11
cat hosts.txt | xargs -I {} ping -c1 {}
Pingar alla värdar som listas i hosts.txt.
12
find . -type f -name "*.bak" | xargs rm -f
Raderar alla backup-filer i aktuellt träd.
13
echo "a b c d e" | xargs -n3
Skriver ut tre argument per rad.
14
find . -type f | xargs file
Tar reda på filtyperna för alla filer.
15
ls *.mp3 | xargs -n1 -I {} mv {} music/
Flyttar alla mp3-filer till katalogen music/.
16
cat packages.txt | xargs sudo apt-get install -y
Installerar alla paket listade i packages.txt (Debian/Ubuntu).
17
find . -type f -size +10M | xargs ls -lh
Listar alla filer större än 10 MB med detaljer.
18
cat files.txt | xargs tar -czf archive.tar.gz
Skapar ett tar-arkiv från filerna listade i files.txt.
19
echo "https://example.com/file1.zip
https://example.com/file2.zip" | xargs -n1 wget
Laddar ner en lista av filer, en åt gången.
20
find . -name "*.c" | xargs grep "main"
Söker efter strängen "main" i alla C-källkodsfiler.


Sidslut

Orginalhemsidan på Engelska : https://man7.org/linux/man-pages/man1/xargs.1.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.