Gnome’s file manager, Nautilus, heeft een interessante feature: Nautilus Scripts. Op simpele wijze kun je eigen scripts (Bash, Python, Perl, …) integreren in Nautilus om handelingen over meerdere bestanden in één keer te runnen. Met behulp van Zenity zijn hier makkelijk zelfs grafische interfaces aan te hangen.

Je kent het wel: je moet een aantal handelingen verrichten op een groter aantal bestanden. Kopiëren of verplaatsen van een groep bestanden is een eitje, maar wat nu als het gaat om bijvoorbeeld het hernoemen van een reeks bestanden? Echte doorgewinterde Linux gebruikers grijpen dan natuurlijk naar de console, maar wat nu als je zo gewend bent de grafische schil te gebruiken? Het automatiseren van handelingen binnen Nautilus vereist dan weliswaar het schrijven van scripts, gelukkig zijn vaak deze zeer simpel te schrijven en het zal je dan ook snel veel tijd besparen!

Nautilus is de standaard file manager voor alle Gnome-based distributies. Verreweg de meeste mensen gebruiken een file manager om enkel makkelijk door de folderstructuur te navigeren, bestanden te kopiëren, verplaatsen, verwijderen of te openen. Maar Nautilus heeft een hele handige feature, die niet veel mensen kennen: Nautilus Scripts.

Dit werkt als volgt: in een speciale folder verzamel je scripts die bepaalde handelingen op bestanden uitvoeren en Nautilus stelt je in staat deze scripts dan over selecteerde bestanden uit te voeren. Er zijn totaal geen beperkingen op wat voor scripts dit kunnen zijn, of wat voor handelingen je hiermee zou kunnen verrichten. Bestanden automatisch hernoemen, bewerken, converteren, back-uppen, uploaden, archiveren, noem maar op. We zullen enkele voorbeelden doornemen, maar eerst de basis!

Installatie

Nautilus zelf is standaard al geïnstalleerd bij Gnome-based distributies. Nautilus zoekt voor scripts in een speciale folder. Deze staan in je home directory; de verzameling scripts is dan ook specifiek voor iedere gebruiker. Afhankelijk van je versie van Nautilus, is dit ~/.gnome2/nautilus-scripts of ~/.local/share/nautilus/scripts. De bestandsnaam van ieder script is de naam die Nautilus aangeeft in het menu. Een script genaamd “een_script.sh” zal dan ook exact zo genoemd worden. Hoewel normaal gesproken niet gebruikelijk, is het voor scripts in de Nautilus Scripts folder dus mooier om de extensie van het bestand weg te laten, en om spaties te gebruiken in plaats van underscores.

Omdat we voor sommige voorbeeld scripts graag een simpele grafische interface maken, hebben we ook Zenity nodig. Omdat Zenity een Gnome pakket is en veel andere programma’s ook Zenity gebruiken, is het waarschijnlijk ook al geïnstalleerd op je systeem. Zo niet, installeer het “zenity” pakket met je package manager of download het hier: https://github.com/GNOME/zenity.

In de voorbeelden hieronder gebruiken we twee extra tools. Exiv2 voor het uitlezen van gegevens van foto’s (http://www.exiv2.org/) en ImageMagick voor het bewerken van foto’s (http://www.imagemagick.org/). Beide zijn ruim vertegenwoordigd in verschillende Linux distributies en beschikbaar via de package managers.

Hernoemen van bestanden

Heb je bestanden met hoofdletters in de naam en wil je daar makkelijk van af? Geen probleem. Open je favoriete text editor en type de code over uit Listing 1. Dit is een Bash script, dat per bestand dat het script ontvangt, in de naam grote letters naar kleine omzet. De -n flag van het mv (move) commando zorgt ervoor dat je geen bestanden overschrijft. Onder Linux zijn tenslotte BESTAND.txt en bestand.txt twee verschillende bestanden en we willen niet per ongeluk iets overschrijven.

 

#!/bin/bash

for file in “$@”

do

                mv -n “$file” “$(echo $file | tr ‘[A-Z]’ ‘[a-z]’)”;

done

 

Sla het script nu op in de directory van Nautilus Scripts (zie onder kopje Installatie) en noem hem “Naar kleine letters”. Nu moet hij nog uitvoerbaar worden gemaakt, zodat Nautilus het script kan draaien. Ga met Nautilus naar de speciale folder, klik op je bestand met de rechter muis toets en open het “Properties” menu. Ga dan naar de tab “Permissions” en klik “Allow executing file as program” aan. Klaar! Laten we nu het script op zichzelf testen. Herlaad voor de zekerheid de view van Nautilus (met de F5 toets) en klik met je rechter muis toets op je nieuwe script. Je ziet nu een “Scripts” optie; klik daar op. Nu zie je het nieuwe script als optie staan. Klik er maar op om te testen of het werkt! (zie Afbeelding 1).

 

Een ander voorbeeld waar het hernoemen van bestanden erg handig is, is bij het samenvoegen van foto’s uit verschillende camera’s in één folder. De ene camera noemt de foto’s IMG_0001.JPG, de andere DSC00001.JPG, weer een andere P0000001.JPG. Dat is niet handig als je de foto’s op volgorde wilt zien van datum en tijdstip dat ze genomen zijn. We gebruiken hier Exiv2 voor. Maak nu een nieuw script volgens Listing 2, en noem deze “Hernoem naar datum”. Vergeet ook niet weer het bestand uitvoerbaar te maken. 

#!/bin/bash

for file in “$@”

do

               exiv2 rename -r “%Y-%m-%d %H.%M.%S :basename:” “$file”

 

Exiv2 hernoemt alleen foto’s en blijft van andere bestanden af. Hij leest de datum en tijd dat de foto gemaakt is uit de foto uit, en hernoemt de foto door de datum en tijd voor de naam te plakken. Een foto als “IMG_0001.JPG” zal dan worden hernoemd naar “2015-10-31 21:50:06 IMG_0001.JPG”. Probeer dit script maar eens uit! Je zult zien hoe mooi alles nu sorteert!

Maar wat nu als je dit terug zou willen draaien? Of een ander voorbeeld hebt, waarbij je het begin van een bestandsnaam weg wilt halen? Hier gaan we dan nu toch input van de gebruiker nodig hebben. Natuurlijk kun je tien scripts schrijven en deze verschillende aantallen karakters weg laten halen, maar het zou mooier zijn als één script dat kan. Hier gaan we Zenity voor gebruiken. Maak een nieuw bestand aan en gebruik de code uit Listing 3. Sla het bestand op als “Kort bestandsnaam in (links)”, en maak hem uitvoerbaar.

#!/bin/bash

INT=`zenity –width 300 –title “Kort bestandsnaam in (links)” \

             –entry –text=”Met hoeveel karakters?”`;

 

rename “s/^.{${INT}}//” “$@”

Listing 3 Script voor het inkorten van een bestandsnaam, dat eerst vraagt hoeveel karakters er moeten worden verwijderd.

Probeer maar eens uit op de foto’s waar je de datum ervoor hebt laten zetten. Zo kun je dus simpel die stap weer ongedaan maken.

Bewerken van foto’s

Natuurlijk zijn er vele manieren waarop je foto’s kunt bewerken. Bijvoorbeeld de JPG-compressie ophogen om de bestanden te verkleinen, het formaat wijzigen of het type bestand veranderen, zoals het maken van een animated GIF van een aantal foto’s. Een onmisbare tool hiervoor is ImageMagick. Het voorbeeld hieronder laat zien hoe je de resolutie aanpast van je foto’s, om ze bijvoorbeeld makkelijk te kunnen e-mailen. Maak een nieuw bestand aan met de code uit Listing 4, sla het bestand op als “Verklein foto’s” in de Nautilus Scripts folder en maak het bestand uitvoerbaar.

Selecteer enkele foto’s in Nautilus en activeer het script (zie Afbeelding 2). Kies de gewenste resolutie en klik op “OK”. Je foto’s worden nu verkleind en je kunt de voortgang volgen via de voortgangsbalk (zie Afbeelding 3).

 

Meer voorbeelden

Ben je nu enthousiast geworden en wil je meer zien? Er staan online meerdere verzamelingen van Nautilus Scripts. De Ubuntu website geeft een korte introductie en linkt onderaan naar drie pagina’s met voorbeeld scripts:

https://help.ubuntu.com/community/NautilusScriptsHowto

#!/bin/bash

SIZE=`zenity –title “Verklein foto’s” –list \

             –text=”Naar welke resolutie?” –column=”” –radiolist \

             –column=”” –print-column=2 –hide-column=2 –column=”Langste zijde” \

            “” 850 “850 pixels (0.5 MP)” \

             “” 1280 “1250 pixels (1.0 MP)” \

            “” 1750 “1750 pixels (2.0 MP)”`;

 

if [[ ! $SIZE =~ ^[0-9]+$ || $SIZE -le 10 ]]

then

              exit 1;

fi

 

cd `dirname “$1″`;

mkdir -p “thumbnails_${SIZE}”;

 

TOTAL=$#

COUNT=0

for file in “$@”

do

               COUNT=$(($COUNT+1))

             if [[ -w “${file}” ]]

             then

              convert -size ${SIZE}x${SIZE} “$file” -resize \

            ${SIZE}x${SIZE} “thumbnails_${SIZE}/$file”

            echo $(($COUNT*100/$TOTAL))

             fi

done | zenity –width=300 –title “Foto’s aan het verkleinen…” \

            –progress –text=”Foto’s aan het verkleinen…” \

            –auto-close –auto-kill

Listing 4 Script voor het verkleinen van foto’s volgens een vaste lijst afmetingen.