OS X: %20 uit bestandsnamen halen

Bij het downloaden van bestanden worden deze vaak met een andere tekens in de bestandsnaam opgeslagen dan je werkelijk zou willen. Zo wordt een spatie vervangen door  %20 op die plek in de naam te zetten. Andere websites zorgen er bijvoorbeeld weer voor dat er een _ in de plaats komt. Elke week ben ik dus wel bezig om deze bestandsnamen handmatig weer te wijzigen naar de originele naam. Dat moet dus makkelijker kunnen zou je zo denken …

Ik heb twee oplossingen gemaakt en getest. Allereerst ben ik begonnen met Automator, wat standaard aanwezig is in OS X. Vervolgens een kort script (oneliner) die in de terminal uitgevoerd kan worden (of natuurlijk als script).
Maar allereerst Automator.

Stap 1:
Start Automator op en selecteer onder de Library de optie “Files & Folders” en sleep in de middenkolom de optie “Ask for Finder Items” naar het werkveld rechts.

2014-02-20_17-59-31

Stap 2:
Vervolgens zoek je in de middenlijst het item “Rename Finder Items”. Voeg deze ook toe aan de middenkolom. Omdat deze optie straks namen gaat wijzigen, wordt er een melding gegeven waarin gevraagd wordt of je eerst een kopie wil maken. In dit voorbeeld heb ik daar niet voor gekozen, maar voel je vrij om dat wel te doen.

2014-02-20_18-06-23

 

Stap 3:
Vervolgens gaan we beide vensters aanpassen zodat het aan de wensen voldoet.
In het eerste venster (“Ask for Finder Items”) heb ik het veld “Start at” gezet op “Downloads”, omdat daar de meeste gedownloade bestanden in eerste instantie terecht komen.
Vervolgens het tweede venster. Het veld links bovenin heb ik gewijzigd naar “Replace text”. Daarna heb ik in het veld “Find” datgene gezet dat gezocht moet worden in de bestandsnaam. In dit voorbeeld dus “%20”. In het veld “Replace” heb ik dan alleen een spatie ingevuld. Hierdoor worden de bestandsnamen doorzocht op de tekens %20. Mochten die voorkomen worden ze vervangen door een spatie.

2014-02-20_18-08-19

Stap 4:
De één na laatste stap bestaat uit het opslaan van het Automator-script. In dit voorbeeld heb ik het opgeslagen als een App, waardoor het zelfstandig als applicatie te openen is. Dubbelklikken op de app zorgt ervoor dat er een Finder geopend wordt die om bestanden vraagt. Deze Finder opent standaard in Downloads, zoals aangegeven. Door de optie “Allow Multiple Selection” aan te laten staan in het eerste venster van ons script, is het mogelijk om meerdere bestanden tegelijk te selecteren.

Stap 5:
Testen ….

OneLiner

Een andere manier is om gebruik te maken van een scriptje dat je rechtstreeks in de Terminal kan ‘draaien’:

find ~/Downloads/ -type f -name *%20* -exec sh -c 'mv "$1" "${1//%20/ }"' -- {} ; 

Allereerst wordt het commando Find gebruikt om de bestanden te zoeken die aan bepaalde criteria voldoen. Deze criteria zijn:

  • het pad naar de bestanden (~/Downloads/) oftewel de folder downloads in de eigen homefolder
  • -type f oftewel het gaat om een normaal bestand en geen alias bijvoorbeeld
  • -name: er wordt gezocht naar %20 in de bestandsnaam. De * voor en na zijn zogenaamde wildcards, m.a.w. er mogen dus karakters voor en na de %20 komen. De geldt hier als escape-teken. Dit om ervoor te zorgen dat deze wildcards ook zo gelezen worden
  • -exec sh: hier wordt de shell (bash) aangeroepen en uitgevoerd
  • -c: er volgt een string die wordt uitgevoerd
  • mv: het commando move wat gebruikt kan worden om te verplaatsen, maa rook om te hernoemen.
  • vervolgens wordt de bestandsnaam in een variabel gezet, wordt de %20 eruit gehaald en vervangen door een spatie

Het commando kan eenvoudig aangepast worden om bijvoorbeeld een underscore ( _ ) i.p.v. %20 eruit te filteren. In onderstaand voorbeeld wordt de _ vervangen door het – teken:

find ~/Downloads/ -type f -name *_* -exec sh -c 'mv "$1" "${1//_/-}"' -- {} ;