GNU parallell
Utvecklare | GNU-projekt |
---|---|
Stabil frisättning | 20210422 / 22 april 2021
|
Förvar | |
Skrivet i | Perl |
Operativ system | GNU |
Typ | Verktyg |
Licens | GPLv3 |
Hemsida |
|
GNU parallell är ett kommandoradsdrivet verktyg för Linux och andra Unix-liknande operativsystem som låter användaren köra skalskript eller kommandon parallellt . GNU parallell är fri programvara , skriven av Ole Tange i Perl . Den är tillgänglig under villkoren för GPLv3 .
Användande
Den vanligaste användningen är att byta ut skalöglan, till exempel
medan du läser x ; gör do_something " $x " klar < lista | process_output
till formen av
< lista parallell do_something | process_output
där fillistan innehåller argument för do_something
och där process_output
kan vara tom .
Skript som använder parallella är ofta lättare att läsa än skript som använder pexec .
Programmet parallella funktioner också
- gruppering av standardutdata och standardfel så att utdata från de parallellt körande jobben inte körs tillsammans;
- bibehållande av utmatningsordningen för att förbli samma ordning som inmatningen;
- hantera filnamn som innehåller specialtecken som blanksteg, enkla citattecken, dubbla citattecken, et-tecken och UTF-8-kodade tecken;
Som standard kör parallell lika många jobb parallellt som det finns CPU-kärnor .
Exempel
hitta . -namn "*.foo" | parallell grep bar
Ovanstående är en parallell motsvarighet till:
hitta . -namn "*.foo" -exec grep bar {} +
Detta söker i alla filer i den aktuella katalogen och dess underkataloger vars namn slutar på .foo efter
förekomster av strängfältet .
Parallellkommandot kommer att fungera som förväntat om inte ett filnamn innehåller en ny rad . För att undvika denna begränsning kan man använda:
hitta . -namn "*.foo" -print0 | parallell -0 grep bar
Ovanstående kommando använder noll-tecknet för att avgränsa filnamn.
hitta . -namn "*.foo" | parallell -X mv {} /tmp/trash
Ovanstående kommando expanderar {}
med så många argument som kommandoradslängden tillåter, och fördelar dem jämnt mellan parallella jobb om det behövs. Detta kan minska processoverhead för kortlivade kommandon som tar kortare tid att slutföra än de gör att starta.
hitta . -maxdjup 1 -typ f -namn "*.ogg" | parallell -X -r cp -v -p {} /home/media
Kommandot ovan gör samma sak som:
cp -v -p *.ogg /home/media
Men det tidigare kommandot som använder find
/ parallell
/ cp
är mer resurseffektivt och kommer inte att stoppas med ett fel om expansionen av *.ogg är för stor för skalet.