xargs(1): Skillnad mellan sidversioner
Admin (diskussion | bidrag) |
Admin (diskussion | bidrag) |
||
| (En mellanliggande sidversion av samma användare visas inte) | |||
| Rad 142: | Rad 142: | ||
Denna sida hämtades från projektets Git-repo den 2 februari 2025. | 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 <pre>find</pre>, <pre>grep</pre> och <pre>printf</pre> 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 == | |||
<pre> | |||
# Grundform | |||
xargs [flaggor] [kommando [kommandoflaggor]] | |||
# Med platshållare | |||
xargs -I {} kommando ... {} | |||
</pre> | |||
== Vanliga flaggor == | |||
{| class="wikitable" | |||
! Flagga | |||
! Beskrivning | |||
|- | |||
| <pre>-n N</pre> | |||
| Skicka högst N argument per kommandokörning (”batchstorlek”). | |||
|- | |||
| <pre>-I {}</pre> | |||
| Använd platshållaren <code>{}</code> där indata ska injiceras (en körning per rad). | |||
|- | |||
| <pre>-0</pre> | |||
| Läs NUL-separerad indata (säker för blanksteg/nyrader i filnamn). Kombinera med <pre>find -print0</pre>. | |||
|- | |||
| <pre>-r</pre> (GNU) | |||
| Kör inte kommandot om indata är tom (”no-run-if-empty”). | |||
|- | |||
| <pre>-p</pre> | |||
| Fråga användaren före varje körning (interaktiv bekräftelse). | |||
|- | |||
| <pre>-t</pre> | |||
| Skriv ut kommandot som körs (”trace”) – bra för felsökning. | |||
|- | |||
| <pre>-d SEP</pre> | |||
| Använd egen avgränsare i stället för blanksteg/nyrad (t.ex. <pre>-d '\n'</pre>). | |||
|- | |||
| <pre>-P N</pre> (GNU) | |||
| Kör upp till N kommandon parallellt (parallellism). | |||
|} | |||
== Tips & fallgropar == | |||
* **Filnamn med mellanrum/konstiga tecken:** använd <pre>find ... -print0 | xargs -0 ...</pre>. | |||
* **Tom indata:** lägg till <pre>-r</pre> (GNU) för att undvika ”nakna” körningar. | |||
* **När använda <pre>-I {}</pre>?** När argument inte ska ligga sist eller när du behöver fler än ett förekomstställe. | |||
* **Parallellitet:** <pre>-P</pre> kan ge stor fartvinst vid nät-/CPU-tunga jobb. Var uppmärksam på race conditions. | |||
* **Alternativ till xargs:** <pre>find ... -exec ... {} +</pre> batchar också argument, medan <pre>-exec ... {} \;</pre> kör en och en. | |||
= Exempel på användning av xargs = | |||
Tabellen nedan visar 20 praktiska exempel på hur man kan använda kommandot <pre>xargs</pre> i Linux. | |||
{| class="wikitable sortable" | |||
! Nr | |||
! Kommando | |||
! Förklaring | |||
|- | |||
| 1 | |||
| <pre>echo "file1 file2 file3" | xargs rm</pre> | |||
| Tar bort filerna file1, file2 och file3. | |||
|- | |||
| 2 | |||
| <pre>find . -name "*.txt" | xargs wc -l</pre> | |||
| Räknar antalet rader i alla .txt-filer i katalogträdet. | |||
|- | |||
| 3 | |||
| <pre>ls *.jpg | xargs -n1 -I {} cp {} /backup/</pre> | |||
| Kopierar varje .jpg-fil till /backup/. | |||
|- | |||
| 4 | |||
| <pre>cat urls.txt | xargs wget</pre> | |||
| Laddar ner alla URL:er listade i urls.txt. | |||
|- | |||
| 5 | |||
| <pre>find . -type f -print0 | xargs -0 du -sh</pre> | |||
| Visar storleken på alla filer, säkert även med mellanslag i filnamn. | |||
|- | |||
| 6 | |||
| <pre>cat list.txt | xargs -n2 echo</pre> | |||
| Skriver ut två ord per rad från list.txt. | |||
|- | |||
| 7 | |||
| <pre>find /var/log -name "*.log" | xargs gzip</pre> | |||
| Komprimerar alla loggfiler i /var/log. | |||
|- | |||
| 8 | |||
| <pre>echo "one two three" | xargs -n1</pre> | |||
| Skriver ut varje ord på egen rad. | |||
|- | |||
| 9 | |||
| <pre>grep -rl "TODO" . | xargs sed -i 's/TODO/DONE/g'</pre> | |||
| Ersätter texten "TODO" med "DONE" i alla matchande filer. | |||
|- | |||
| 10 | |||
| <pre>ls | xargs -n1 basename</pre> | |||
| Visar filnamnen utan katalogdel. | |||
|- | |||
| 11 | |||
| <pre>cat hosts.txt | xargs -I {} ping -c1 {}</pre> | |||
| Pingar alla värdar som listas i hosts.txt. | |||
|- | |||
| 12 | |||
| <pre>find . -type f -name "*.bak" | xargs rm -f</pre> | |||
| Raderar alla backup-filer i aktuellt träd. | |||
|- | |||
| 13 | |||
| <pre>echo "a b c d e" | xargs -n3</pre> | |||
| Skriver ut tre argument per rad. | |||
|- | |||
| 14 | |||
| <pre>find . -type f | xargs file</pre> | |||
| Tar reda på filtyperna för alla filer. | |||
|- | |||
| 15 | |||
| <pre>ls *.mp3 | xargs -n1 -I {} mv {} music/</pre> | |||
| Flyttar alla mp3-filer till katalogen music/. | |||
|- | |||
| 16 | |||
| <pre>cat packages.txt | xargs sudo apt-get install -y</pre> | |||
| Installerar alla paket listade i packages.txt (Debian/Ubuntu). | |||
|- | |||
| 17 | |||
| <pre>find . -type f -size +10M | xargs ls -lh</pre> | |||
| Listar alla filer större än 10 MB med detaljer. | |||
|- | |||
| 18 | |||
| <pre>cat files.txt | xargs tar -czf archive.tar.gz</pre> | |||
| Skapar ett tar-arkiv från filerna listade i files.txt. | |||
|- | |||
| 19 | |||
| <pre>echo "https://example.com/file1.zip | |||
https://example.com/file2.zip" | xargs -n1 wget</pre> | |||
| Laddar ner en lista av filer, en åt gången. | |||
|- | |||
| 20 | |||
| <pre>find . -name "*.c" | xargs grep "main"</pre> | |||
| Söker efter strängen "main" i alla C-källkodsfiler. | |||
|} | |||
= Sidslut = | = Sidslut = | ||
Nuvarande version från 29 augusti 2025 kl. 17.55
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
- GNU findutils hjälp: https://www.gnu.org/software/findutils/#get-help
- Översättningsfel: https://translationproject.org/team/
- Buggrapporter: https://savannah.gnu.org/bugs/?group=findutils
- Mailinglista: https://lists.gnu.org/mailman/listinfo/bug-findutils
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.