Handig: epische oneliners met de Linux CLI

Maandag 21 oktober 2024 ging AT Computing op pad voor een ongebruikelijk bedrijfsuitje: heftruck rijden! Dit idee kwam spontaan tot stand na de jaarlijkse barbecue van De Complementair Groep. Vijfhart ARBO-opleidingen is, net als AT Computing, onderdeel van deze groep. Tijdens de barbecue kregen diverse AT-medewerkers te horen dat Vijfhart ARBO-opleidingen onder andere training voor heftruckchauffeurs levert. “Hoe gaaf is dat?” aldus diverse AT-ers.

Mannen en speelgoed

Een paar dagen na de barbecue stapte AT-directeur Marcel dan ook naar “ARBO-heren” Rien en Harm toe met de vraag of zij niet een dagje heftruck-training als bedrijfsuitje voor AT Computing konden faciliteren. Geen probleem! En zo geschiedde.


"Waarom? Mannen en speelgoed. Zo simpel is het soms."

Deze memorabele dag kon natuurlijk niet zonder vastlegging op de gevoelige plaat en dus werden er volop actiefoto's gemaakt. Een kleine 200 in totaal. Het duurde helaas niet lang voordat we vanaf de stoel van de heftruck alweer terug op onze bureaustoel zaten. Terug in onze comfortzone en terug bij onze kernkwaliteit: werken met Linux. Genoeg te doen, want er moesten immers 200 foto's uitgezocht en/of bewerkt worden! Niet geheel toevallig is de commandoregel van Linux hier verdraaid handig voor!

Nadat de foto's vanaf de geheugenkaart in de verse directory “heftruck” op de computer zijn gezet, kan met de terminal heel snel het een en ander worden geregeld. Met enkele epische oneliners is het verwerken van 200 foto's zo gepiept.

                      
# 1. een reservekopie maken van alle foto's zodat de originelen
# bij foutgelopen bewerking veilig zijn
cp -rp heftruck/ heftruck_bck/ && tar -cf heftruck.tar heftruck_bck/*

# Hierbij zorgt de -r vlag bij `cp` ervoor dat alle bestanden 
# in de `heftruck` directory worden gekopieerd en de -p vlag zorgt 
# ervoor dat de directory heftruck_bck wordt aangemaakt als deze nog niet bestaat.
# Met `&&` wordt het volgende commando ingeluid.
# Met `tar` wordt de backup-directory tot een tarball (tar-archief) 
# geplet zodat je deze eenvoudig naar je favorieten backup-locatie 
# kunt kopieren. Dan ben je gelijk beschermd tegen het onverwacht sterven 
# van je hardeschijf of ssd.

# Okay, nu we de originelen hebben veiliggesteld kunnen 
# we aan de slag met bewerken. Hiervoor maken we eerst een 
# array met alle bestandsnamen zodat we ze daarna eenvoudig 
# kunnen gaan hernoemen.

# 2. Vul een array met alle bestandsnamen:
for FILE in *.JPG; do foto_array+=($FILE); done

# Je kunt de volledige inhoud van dit array bekijken door bijvoorbeeld:
echo “${foto_array[@]}”

# 3. maak een for-loop die door de array heen wandelt
# maak de doel-directory aan (cp kan dit niet “on the fly”)
mkdir rename

# maak voor aanpassing van de bestandsnamen een teller
counter=0

# de epische oneliner loop
for FILE in "${foto_array[@]}"; do formatted_counter=$(printf "%03d" "${counter} "); \
cp "${FILE}" "rename/AT_HEFTRUCK_${formatted_counter}.JPG"; \
magick "rename/AT_HEFTRUCK_${formatted_counter}.JPG" -resize 25% "rename/ \
AT_HEFTRUCK_${formatted_counter}.JPG"; \
counter=$((counter + 1)); done
                    
                  

bash

Wat gebeurt hier precies?

Als eerste laten we de for-loop op basis van de shell-variabele FILE door de array met alle bestandsnamen lopen. @ is hierbij de index van de array en die wordt iederen keer opgehoogd als de loop is volbracht.

Voor ieder veld binnen de array worden vier commando's uitgevoerd. Als eerste maken we een nette nummering aan voor de nieuwe bestandsnaam. Hiervoor pakken we de waarde van de variabele counter en zorgen er met printf voor dat deze “aanvullen” tot het uit 3 cijfers bestaat (dit is wat %03d doet). 0 wordt daardoor 000, 1 wordt 001 etc.

Vervolgens kopieert het commando cp het bestand met de naam $FILE naar de directory rename. Alle bestanden krijgen hierbij een nieuwe naam met prefix AT_HEFTRUCK_ gevolgd door de 3 cijfers uit de formatted_counter variabele. Voor gemak bij het openen wordt ook het bestandstype meegegeven (.JPG).

Nadat de foto's vanaf de geheugenkaart in de verse directory “heftruck” op de computer zijn gezet, kan met de terminal heel snel het een en ander worden geregeld. Met enkele epische oneliners is het verwerken van 200 foto's zo gepiept.

Als het cp commando is uitgevoerd dan hebben we dus een hernoemde kopie van alle foto's in de rename directory. De foto's kunnen vervoglens met de (ietwat spartaanse) open source tool image magick naar wens worden bewerkt. In dit geval wordt de grootte naar 25% van het origineel gereduceerd zodat het bestand kleiner wordt en eenvoudiger te delen is via bijvoorbeeld social media.

Als laatste hogen we de waarde van de variabele counter op met 1 zodat bij een volgende iteratie van de for-loop een nieuwe, unieke bestandsnaam met een suffix van 3 cijfers wordt gecreeerd.

Voila! We hebben met een paar commando's nu 200 foto's binnen een minuutje klaargemaakt voor backup, hernoemd en verkleind zonder ook maar 1 bestand te hoeven openen in een fotobewerkeringsprogramma.

Best handig toch?!

Wil je meer leren over Linux of Shell Scripting? Check dan onze Linux/UNIX Fundamentals of Shell Scripting Fundamentals trainingen! Deze trainingen zijn exclusief verkrijgbaar via ons zusterbedrijf Vijfhart IT-Opleidingen.

$ blog-details

  • $ categorie: Linux, tips, CLI, UNIX
  • $ tools: Bash
  • $ date: 2024-11-04T14:30:50 CEST

Dit vind je wellicht ook interessant...