Dat werkt veel makkelijker dan handmatig verwerken. Want wat je daarmee automatiseert is dit:
- ga naar de map waar je script staat
- open je script
- pas het pad en de bestandnaam aan naar die van het bestand dat je wil verwerken
- sla het bestand op en sluit het
- laat het script uitvoeren
- herhaal voor elk bestand dat moet worden verwerkt
Je kunt dus een reeks bestanden tegelijk laten verwerken wat het allemaal veel prettiger maakt.
Het gaat allemaal met een paar klikken van de muis.
Het volgende voorbeeld kan gebruikt worden om reeksen van bestanden tegelijk te verwerken. Het is op allerlei manieren aan te passen aan je eigen wensen.
De eigenlijke verwerking van het bestand staat in een apart script. Hiervoor is gekozen omdat de verwerking vrij complex kan zijn en nogal een lang script kan worden. Als je dat moet debuggen moet je na iedere wijziging het script opnieuw in de nemo map voor je scripts zetten. Op deze manier hoef je alleen het sturende script in de nemo map te zetten en kun je het eigenlijke verwerkingsscript zonder verdere omhaal steeds weer aanpassen.
Overigens kun je het pad en de bestandsnaam van je verwerkingsscript eenvoudig in het stuurscript opnemen. Je klikt op het verwerkingsscript en selecteert kopiëren, dan ga je naar het stuurscript en kiest daar bij source voor plakken. Het systeem is slim genoeg om te begrijpen dat je daar het pad en bestandsnaam nodig hebt en niet de inhoud van dat bestand. Zo kun je ook heel eenvoudig playlists samenstellen. Maar dat is weer een ander verhaal.
Maak eerst het verwerkingsscript aan. Dit krijgt de naam process-info.sh.
Code: Selecteer alles
#!/bin/bash
echo "$StapTotaal"
echo "# ${FileCount}/${FileTotal} - InputFileName: ${InputFileName}, InputFileExt: ${InputFileExt}."
sleep 3
Dit is een erg eenvoudig script. Het gaat ook alleen maar om het idee.
Maak vervolgens het stuurscript aan met de naam multi-process-info.sh en kopieer de volgende inhoud daar naartoe.
Code: Selecteer alles
#!/bin/bash
# lees huidige padnaam
CurrentURI=( "$NEMO_SCRIPT_CURRENT_URI" )
# zet invoer bestanden in array
ImageFileList=( "$@" )
# lees aantal invoerbestanden
FileTotal=( "$#" )
#-------------------------------------------------------------------------------------------------------------
# bereken stapgrootte per bestand voor progressbar
Stap=$(echo "scale=0; 100 / $FileTotal" | bc)
StapTotaal=0
(
echo "# CurrentURI: $CurrentURI."
sleep 3
echo "# FileTotal: $FileTotal."
sleep 3
# invoer bestanden verwerken
FileCount=1
for InputFile in "${ImageFileList[@]}"
do
# strip extensie van bestand
InputFileName="${InputFile%.*}"
# strip naam van bestand
InputFileExt="${InputFile##*.}"
# bestand verwerken
source '/home/mogenblue/scripts/process-info.sh'
# update progressbar
let StapTotaal=StapTotaal+Stap
echo "$StapTotaal"
(( FileCount++ ))
done
# wordt alleen getoond als auto-close niet is geselecteerd
echo "100"
echo "# alle bestanden zijn verwerkt."
) |
zenity --progress \
--title="Bestanden verwerken" \
--text="Inlezen bestanden ..." \
--percentage=0 \
--no-cancel --width=1000
# variaties voor opties van het zenity commando
# --percentage=0 --pulsate \
# --auto-close --no-cancel --width=600 --height=200
# --no-cancel --width=800
Dit stuurscript moet ook uitvoerbaar worden gemaakt.
Nu moet je het stuurscript kopiëren naar de nemo map.
Open Nemo
Kopiëer het stuurscript
Klik in de menubalk op Bewerken
Klik op Invoegsels
In het venster script moet je rechtsonder op het map icoon klikken.
Dan kom je in de map voor je eigen scripts: .local/share/nemo/scripts
Plak je stuurscript in die map.
Sluit het venster.
Sluit de Invoegsels.
Klaar. Nu kun je een reeks bestanden selecteren en automatisch laten verwerken.
Door het source commando in het stuurscript wordt de inhoud van het verwerkingsscript in het stuurscript ingelezen. Dat betekent dat de variabelen van het stuurscript ook beschikbaar zijn voor het verwerkingsscript.
Links waar ik mijn wijsheid heb gevonden:
Convert command line arguments into an array in Bash
How do I find the number of arguments passed to a Bash script?
Extract filename and extension in Bash
How to check if a variable is set in Bash?