GNU parallell

Parallell
Utvecklare GNU-projekt
Stabil frisättning
20210422 / 22 april 2021 ; 21 månader sedan ( 2021-04-22 )
Förvar
Skrivet i Perl
Operativ system GNU
Typ Verktyg
Licens GPLv3
Hemsida www .gnu .org /software /parallel /  Edit this on Wikidata

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

Introduktionsvideo, del 1
Introduktionsvideo, del 2

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.

Se även

externa länkar