Maak een Mac-snelkoppeling die alleen de inhoud verwijdert om een herbruikbare uitvoermap te wissen zonder de map zelf te verwijderen. In deze handleiding gebruiken we een vaste map, tijdelijke tekstbestanden en een shellscript dat de map controleert voordat die wordt gewist.
De bedoeling is om één map opnieuw in te stellen tussen batches met gegenereerde bestanden. Het voorbeeld bevat gewone bestanden, een bestandsnaam met spaties, een verborgen bestand en een geneste map. Het script verwijdert deze inhoud direct; de bestanden worden niet naar de Prullenmand verplaatst. In de gepubliceerde handleiding van Apple over rm worden recursieve verwijdering en foutmeldingen beschreven. Handleiding van Apple over rm
Bepaal wat er na het wissen moet overblijven
In deze werkwijze is het gewenste resultaat een bestaande, lege map op hetzelfde pad. Eventuele submappen daarin tellen ook als uitvoer en worden samen met hun inhoud verwijderd. Als je uitvoermap sjablonen of een permanente submappenstructuur bevat, moet je dit script aanpassen met een andere selectieregel voordat je het gebruikt.
De voorbeeldmap is Shortcut Output Demo, direct in je thuismap. Doordat de doelmap vaststaat, is de snelkoppeling eenvoudig te controleren: het gedrag hangt niet af van het Finder-venster dat openstaat of van het bestand dat toevallig is geselecteerd.
| Vereiste | Gedrag in deze handleiding |
|---|---|
| De uitvoermap behouden | Alleen paden naar de inhoud worden doorgegeven aan rm |
| Verborgen uitvoer meenemen | Bash-optie dotglob neemt namen op die met een punt beginnen |
| Een al lege map afhandelen | Een lege lijst met inhoud wordt geaccepteerd |
| Een ontbrekende map afhandelen | Stoppen met een foutmelding; de map niet opnieuw aanmaken |
| Geneste uitvoer verwijderen | Elke submap recursief verwijderen |
| De mogelijkheid behouden om Finder ‘Terugzetten’ te gebruiken | Gebruik in plaats daarvan het Finder-alternatief hieronder |
Finder biedt een handig alternatief als je items in de Prullenmand wilt laten staan. Open de uitvoermap, selecteer de items die daarin weg mogen en druk op Command-Delete. Laat de map zelf gedeselecteerd. Apple vermeldt dat items in de Prullenmand blijven totdat deze wordt geleegd en kunnen worden teruggezet via Archief > Terugzetten. Bestanden en mappen verwijderen op de Mac
Maak een tijdelijke map voor de eerste uitvoering
Open Terminal en plak het volledige installatieblok hieronder. Het maakt alleen synthetische tekstbestanden aan. De eerste mkdir moet slagen voordat er bestanden worden geschreven. Als er al een bestand of map met de naam Shortcut Output Demo bestaat, stopt de installatie dus in plaats van de inhoud ervan opnieuw te gebruiken.
/bin/bash <<'BASH'
set -eu
target="$HOME/Shortcut Output Demo"
if ! /bin/mkdir "$target"; then
printf 'Setup stopped: choose an unused demo folder name.\n' >&2
exit 1
fi
/bin/mkdir "$target/Batch"
printf 'Synthetic output A\n' > "$target/alpha.txt"
printf 'Synthetic output B\n' > "$target/sample output.txt"
printf 'Synthetic marker\n' > "$target/.demo-marker"
printf 'Synthetic nested output\n' > "$target/Batch/nested.txt"
printf 'Created disposable examples in: %s\n' "$target"
BASH
Open je thuismap in Finder en zoek Shortcut Output Demo. Deze map bevat drie zichtbare items: alpha.txt, sample output.txt en Batch. Het vierde item, .demo-marker, is bewust verborgen. In Batch staat nested.txt. Dit zijn illustratieve testbestanden, geen bestaande gebruikersbestanden.
Als de installatie stopt omdat de naam al bestaat, laat dat bestaande item dan ongemoeid. Kies een andere, ongebruikte naam voor de testmap en pas de doeltoewijzing in zowel het installatieblok als het wiscscript aan. Verwijder de controle op het aanmaken niet alleen om de naamconflict te omzeilen.
Bouw de snelkoppeling en behoud de typen invoer en uitvoer
Klik in Opdrachten op de knop ‘Voeg toe’ om een snelkoppeling aan te maken en geef deze de naam Clear Demo Output. Zoek in de actielijst naar Voer shellscript uit en voeg die actie toe. Apple beschrijft hoe je snelkoppelingen maakt door acties toe te voegen en op naam naar acties te zoeken. Een aangepaste snelkoppeling maken op de Mac, Navigeren door de actielijst in Opdrachten op de Mac
Stel bij de actie Shell in op /bin/bash en vervang de voorbeeldopdrachten door het volledige wiscscript hieronder. Dit script gebruikt Bash-arrays en shopt, dus laat deze shell geselecteerd. Het leest de doelmap uit de toewijzing in het script en gebruikt geen snelkoppelingsinvoer, standaardinvoer of opdrachtregelargumenten.
Als scripts zijn uitgeschakeld, kies je Opdrachten > Instellingen, open je Geavanceerd en schakel je Sta uitvoeren van scripts toe in. Apple beschrijft deze instelling voor het uitvoeren van scripts vanuit snelkoppelingen. Instelling van Apple voor het uitvoeren van scripts
set -u
target="$HOME/Shortcut Output Demo"
if [[ ! -d "$target" || -L "$target" ]]; then
printf 'Expected an existing ordinary folder: %s\n' "$target" >&2
exit 1
fi
if [[ ! -r "$target" || ! -x "$target" ]]; then
printf 'Cannot list the output folder.\n' >&2
exit 1
fi
unset GLOBIGNORE
set +f
shopt -u failglob
shopt -s dotglob nullglob
items=( "$target"/* )
for item in "${items[@]}"; do
if ! /bin/rm -R -- "$item"; then
printf 'Clearing stopped; some items may remain.\n' >&2
exit 1
fi
done
remaining=( "$target"/* )
if (( ${#remaining[@]} != 0 )); then
printf 'The folder still contains items.\n' >&2
exit 1
fi
printf 'Folder is empty: %s\n' "$target"
Bij een geslaagde uitvoering geeft de actie tekst als uitvoer: een regel die begint met Folder is empty:. De uitvoer is geen mapobject, geen lijst met verwijderde bestanden en geen verwijzing naar de herbruikbare map. Als je de snelkoppeling later uitbreidt, geef je de doelmap expliciet door aan elke actie die een map verwacht. In het infovenster van Apple zie je welke invoer een actie accepteert en welke uitvoer deze oplevert. Klik met de Control-toets ingedrukt op het symbool van een actie en kies Toon info om dit te bekijken. Informatie over actie-invoer en -uitvoer bekijken
Voeg na het script de actie Toon melding toe en voeg de uitvoervariabele van het script in het bericht in om een zichtbare melding te tonen wanneer de uitvoering is afgerond. Apple beschrijft hoe je de uitvoer van een vorige actie doorgeeft aan Toon melding om deze te bekijken. Een vast bericht dat zegt dat de map leeg is, biedt minder nuttige feedback dan de daadwerkelijke uitvoer van het script. De actie Toon melding gebruiken in een snelkoppeling op de Mac
Begrijp waarom de map behouden blijft
De toewijzing items=( "$target"/* ) verzamelt de paden naar de inhoud. De lus geeft elk item afzonderlijk door aan rm; \"$target\" zelf wordt nooit doorgegeven. Recursieve verwijdering geldt dus voor submappen met uitvoer, terwijl de herbruikbare bovenliggende map blijft bestaan.
Twee Bash-opties lossen veelvoorkomende problemen bij het opnieuw instellen op. dotglob neemt bestandsnamen op die met een punt beginnen, en nullglob zorgt ervoor dat een patroon dat nergens mee overeenkomt niets oplevert. Door de array-uitbreiding tussen aanhalingstekens te zetten, blijven bestandsnamen met spaties afzonderlijke argumenten. Deze gedragingen worden beschreven in de Bash-handleiding die Apple meelevert. Bash-handleiding: padnaamuitbreiding en arrays
De verwijderopdracht gebruikt -R voor geneste mappen en -- om de verwerking van opties te beëindigen. Het script controleert het resultaat van elke opdracht en stopt bij een fout. In de handleiding van Apple over rm staat dat de opdracht bij een fout een niet-nulstatus retourneert. Verwijderen gebeurt niet als één transactie: als een later item niet kan worden verwijderd, worden eerder verwijderde items niet teruggezet. Handleiding van Apple over rm
Het script weigert ook een doelmap die een symbolische koppeling is. Gebruik dit voorbeeld alleen voor een gewone lokale uitvoermap waarin geen volumes zijn aangekoppeld. Stop elk proces dat uitvoer genereert voordat je de map wist: bestanden die tijdens of na de uitvoering worden aangemaakt, kunnen ertoe leiden dat de map niet leeg blijft.
Controleer de eerste en daaropvolgende uitvoeringen
Voer de snelkoppeling uit met de knop voor uitvoeren in de editor. Controleer het resultaat aan de hand van deze stappen voordat je het doelpad aanpast. Apple beschrijft hoe je een aangepaste snelkoppeling vanuit de editor test. Een aangepaste snelkoppeling testen
- Controleer in Finder of
Shortcut Output Demonog bestaat. - Controleer of de zichtbare voorbeeldbestanden en de map
Batchzijn verdwenen. - Controleer of het script de melding voor een lege map heeft teruggegeven; de laatste controle kijkt ook naar verborgen items.
- Voer de snelkoppeling opnieuw uit. Een map die al leeg is, moet dezelfde melding opleveren.
- Hernoem de lege testmap tijdelijk en voer de snelkoppeling opnieuw uit. Het script moet stoppen met de foutmelding dat de map al bestaat. Zet de naam daarna terug.
Het wiscscript is met bash -n op Bash-syntaxis gecontroleerd. Voor dit artikel is het niet uitgevoerd in Opdrachten op macOS; daarom hoort de eerste uitvoering met tijdelijke bestanden nog steeds bij de installatie.
Als het verwijderen mislukt, controleer dan het gemelde item en de resterende inhoud van de map voordat je het opnieuw probeert. Een ontbrekende doelmap, een map die niet kan worden gelezen en een mislukte verwijdering zijn verschillende situaties; het script geeft hiervoor geen succesmelding.
Hergebruik de map zonder uit te gaan van afhandeling van naamconflicten
Zodra de test met tijdelijke bestanden naar verwachting verloopt, pas je de doeltoewijzing aan zodat deze naar de gewenste uitvoermap verwijst. Controleer eerst de inhoud en houd dezelfde afspraak aan: alles erin is vervangbare uitvoer, inclusief verborgen items en submappen.
Een map wissen verwijdert de namen die op dat moment aanwezig zijn. Daarmee wordt niet bepaald wat een latere export- of opslagactie doet als twee nieuwe bestanden dezelfde naam hebben. Controleer de eigen opties en beschrijving van die actie en ga er niet van uit dat deze reset vervangen, samenvoegen of automatisch hernoemen inschakelt. Apple biedt actieomschrijvingen via Toon info. Het gedrag van een actie bekijken
Je kunt de opgeslagen snelkoppeling ook vanuit Terminal uitvoeren met de volledige opdracht hieronder. Apple beschrijft hoe je namen van snelkoppelingen met spaties tussen aanhalingstekens zet en vermeldt dat de opdracht shortcuts bij succes 0 retourneert en bij een fout 1. Snelkoppelingen uitvoeren vanaf de opdrachtregel
shortcuts run "Clear Demo Output"
Wissen en uitvoer genereren doe je in een bewuste volgorde: rond de vorige batch af, wis de gekozen map, controleer het resultaat en maak daarna de volgende batch. Zo heeft de herbruikbare map een duidelijk doel en zijn herhaalde uitvoeringen voorspelbaar.
Bronnen
- Een aangepaste snelkoppeling maken op de Mac — Apple Support.
- Navigeren door de actielijst in Opdrachten op de Mac — Apple Support.
- Geavanceerde privacy- en beveiligingsinstellingen in Opdrachten op de Mac — Apple Support.
- De actie Toon melding gebruiken in een snelkoppeling op de Mac — Apple Support.
- Bestanden en mappen verwijderen op de Mac — Apple Support.
- Snelkoppelingen uitvoeren vanaf de opdrachtregel — Apple Support.
- rm.1 — Apple Open Source Distributions.
- bash.1 — Apple Open Source Distributions.