Opdracht uitvoeren op alle bestanden in een map

Kan iemand mij de code geven om het volgende te doen: Stel, er is een map met bestanden, die allemaal door een programma moeten worden gehaald. Het programma voert de resultaten uit naar standaard out. Ik heb een script nodig dat in een map gaat, het commando uitvoert op elk bestand, en de uitvoer samenvoegt in één groot uitvoerbestand.

Bijvoorbeeld, om het commando uit te voeren op 1 bestand:

$ cmd [option] [filename] > results.out
Oplossing

De volgende bash-code geeft $file door aan het commando, waarbij $file elk bestand in /dir weergeeft

for file in /dir/*
do
  cmd [option] "$file" >> results.out
done

Voorbeeld

el@defiant ~/foo $ touch foo.txt bar.txt baz.txt
el@defiant ~/foo $ for i in *.txt; do echo "hello $i"; done
hello bar.txt
hello baz.txt
hello foo.txt
Commentaren (8)

Wat dacht je hiervan:

find /some/directory -maxdepth 1 -type f -exec cmd option {} \; > results.out
  • Het -maxdepth 1 argument voorkomt dat find recursief afdaalt in subdirectories. (Als u wilt dat dergelijke geneste mappen worden verwerkt, kunt u dit weglaten).
  • -type -f specificeert dat alleen gewone bestanden worden verwerkt.
  • -exec cmd optie {} vertelt dat cmd met de opgegeven optie voor elk gevonden bestand moet worden uitgevoerd, waarbij de bestandsnaam wordt vervangen door {}
  • `` geeft het einde van het commando aan.
  • Tenslotte wordt de uitvoer van alle individuele cmd executies doorgestuurd naar results.out

Als je echter de volgorde van de bestanden wilt weten, kun je misschien beter af met het schrijven van een lus. Ik denk dat find de bestanden verwerkt op volgorde van inode (hoewel ik me daar in kan vergissen), wat misschien niet is wat je wilt.

Commentaren (5)

Gebaseerd op @Jim Lewis's aanpak:

Hier is een snelle oplossing met find en ook het sorteren van bestanden op hun wijzigingsdatum:

$ find  directory/ -maxdepth 1 -type f -print0 | \
  xargs -r0 stat -c "%y %n" | \
  sort | cut -d' ' -f4- | \
  xargs -d "\n" -I{} cmd -op1 {} 

Voor sorteren zie:

http://www.commandlinefu.com/commands/view/5720/find-files-and-list-them-sorted-by-modification-time

Commentaren (3)