Om du vill rensa en återanvändbar utdatamapp utan att ta bort själva mappen kan du skapa en Mac-genväg som bara tar bort dess innehåll. Den här genomgången använder en fast mapp, tillfälliga textfiler och ett skalskript som kontrollerar mappen innan den rensas.
Uppgiften är att återställa en mapp mellan omgångar med genererade filer. Exemplet innehåller vanliga filer, ett filnamn med blanksteg, en dold fil och en undermapp. Skriptet tar bort innehållet direkt; det flyttar det inte till papperskorgen. Apples publicerade handbok för rm beskriver rekursiv borttagning och felrapportering. Apples handbok för rm
Bestäm vad som ska finnas kvar efter rensningen
I det här arbetsflödet ska resultatet vara en befintlig, tom mapp på samma sökväg. Undermappar i den är också utdata och tas därför bort tillsammans med sitt innehåll. Om din utdatamapp innehåller mallar eller en permanent mappstruktur behöver just det här skriptet en annan urvalsregel innan du använder det.
Exempelmålet är Shortcut Output Demo, direkt i din hemmapp. Med ett fast mål är genvägen lätt att granska: dess beteende beror inte på vilket Finder-fönster som är öppet eller vilken fil som råkar vara markerad.
| Krav | Beteende i den här genomgången |
|---|---|
| Bevara utdatamappen | Endast sökvägar till innehållet skickas till rm |
| Ta med dolda utdata | Bash-alternativet dotglob inkluderar namn som börjar med punkt |
| Hantera en redan tom mapp | En tom lista över innehållet godtas |
| Hantera en mapp som saknas | Avbryt med ett fel; återskapa inte mappen |
| Ta bort nästlade utdata | Ta bort varje undermapp rekursivt |
Behålla möjligheten att använda Finders Lägg tillbaka |
Använd Finder-alternativet nedan i stället |
Finder har ett användbart alternativ om du vill att objekten ska ligga kvar i papperskorgen. Öppna utdatamappen, markera objekten som kan tas bort och tryck på Kommando-Radera. Låt den överordnade mappen vara omarkerad. Apple beskriver att objekt som flyttas till papperskorgen ligger kvar där tills den töms och kan återställas med Arkiv > Lägg tillbaka. Radera filer och mappar på Mac
Skapa en tillfällig mapp för den första körningen
Öppna Terminal och klistra in hela inställningsblocket nedan. Det skapar endast syntetiska textfiler. Det första mkdir måste lyckas innan några filer skrivs, så om det redan finns en fil eller mapp med namnet Shortcut Output Demo avbryts inställningen i stället för att det befintliga innehållet återanvänds.
/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
Öppna din hemmapp i Finder och leta upp Shortcut Output Demo. Den innehåller tre synliga objekt: alpha.txt, sample output.txt och Batch. Det fjärde objektet, .demo-marker, är avsiktligt dolt. I Batch finns nested.txt. Det här är illustrativa testfiler, inte befintliga användarfiler.
Om inställningen avbryts för att namnet redan finns, låt det befintliga objektet vara. Välj ett annat ledigt dem onamn och ändra måltilldelningen i både inställningen och rensningsskriptet så att de stämmer överens. Ta inte bort den inledande kontrollen av att objektet skapas bara för att komma förbi namnkonflikten.
Skapa genvägen och behåll in- och utdatatypen
Klicka på lägg till-knappen i Genvägar för att skapa en genväg och ge den namnet Clear Demo Output. Sök efter Run Shell Script i åtgärdslistan och lägg till den åtgärden. Apple beskriver hur man skapar genvägar genom att lägga till åtgärder och söka efter åtgärder med namn i listan. Skapa en anpassad genväg på Mac, Navigera i åtgärdslistan i Genvägar på Mac
Ställ in åtgärdens Shell på /bin/bash och ersätt sedan exempelk ommandona med hela rensningsskriptet nedan. Skriptet använder Bash-arrayer och shopt, så behåll det skalet. Målet hämtas från tilldelningen i skriptet; det använder inte genvägsinmatning, standardinmatning eller kommandoradsargument.
Om skript är inaktiverade väljer du Genvägar > Inställningar, öppnar Avancerat och aktiverar Tillåt körning av skript. Apple beskriver den här inställningen för att köra skript från genvägar. Apples inställning för skriptkörning
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"
Åtgärdens lyckade utdata är text: en rad som börjar med Folder is empty:. Den är inte ett mappobjekt, en lista över raderade filer eller en referens till den återanvändbara katalogen. Om du senare bygger ut genvägen ska du uttryckligen skicka målmappen till varje åtgärd som förväntar sig en mapp. Apples informationspanel för åtgärder visar vilken indata som godtas och vilken utdata som skapas. Kontrollklicka på en åtgärds ikon och välj Visa info för att granska den. Visa information om åtgärders in- och utdata
Om du vill visa ett slutförandemeddelande lägger du till Show Alert efter skriptet och infogar skriptets utdatavariabel i meddelandet. Apple beskriver hur man skickar en tidigare åtgärds utdata till Show Alert för granskning. Ett fast meddelande om att mappen är tom ger mindre användbar återkoppling än att visa skriptets faktiska resultat. Använd åtgärden Show Alert i en genväg på Mac
Förstå varför mappen finns kvar
Tilldelningen items=( "$target"/* ) samlar sökvägar till innehållet. Loopen skickar varje objekt separat till rm; den skickar aldrig själva \"$target\". Därför gäller den rekursiva borttagningen utdata i undermappar, medan den återanvändbara överordnade mappen lämnas kvar.
Två Bash-alternativ hanterar vanliga problem vid återställning. dotglob inkluderar filnamn som börjar med punkt, och nullglob gör att ett omatchat mönster expanderas till ingenting. Citerad arrayexpansion bevarar filnamn med blanksteg som enskilda argument. Dessa beteenden beskrivs i Apples medföljande Bash-handbok. Bash-handbok: sökvägsexpansion och arrayer
Borttagningskommandot använder -R för nästlade mappar och -- för att avsluta tolkningen av alternativ. Det kontrollerar resultatet av varje kommando och avbryter vid fel. Apples handbok för rm anger en status som inte är noll när ett fel inträffar. Borttagningen sker inte som en transaktion: om det blir fel vid ett senare objekt återställs inte objekt som redan har tagits bort. Apples handbok för rm
Skriptet avvisar också ett mål som är en symbolisk länk. Begränsa det här exemplet till en vanlig lokal utdatamapp utan monterade volymer i den. Stoppa alla processer som skapar utdata innan du rensar: filer som skapas under eller efter körningen kan göra att mappen inte förblir tom.
Kontrollera den första körningen och upprepade körningar
Kör genvägen med körknappen i redigeraren. Kontrollera resultatet mot den här sekvensen innan du ändrar målsökvägen. Apple beskriver hur man testar en anpassad genväg i redigeraren. Testa en anpassad genväg
- Bekräfta i Finder att
Shortcut Output Demofortfarande finns. - Bekräfta att de synliga exempelfilerna och mappen
Batchhar försvunnit. - Bekräfta att skriptet returnerade meddelandet om att mappen är tom; den sista kontrollen omfattar dolda objekt.
- Kör genvägen igen. En mapp som redan är tom ska ge samma meddelande.
- Byt tillfälligt namn på den tomma demomappen och kör igen. Skriptet ska avbrytas med felet om att mappen finns. Återställ namnet efteråt.
Rensningsskriptet klarade en Bash-syntaxkontroll med bash -n. Det har inte körts i macOS Genvägar för den här artikeln, så den tillfälliga sekvensen för den första körningen är fortfarande en del av inställningen.
Om borttagningen misslyckas ska du granska det rapporterade objektet och mappens återstående innehåll innan du försöker igen. Ett mål som saknas, en katalog som inte går att läsa och en misslyckad borttagning är olika förhållanden; skriptet omvandlar dem inte till ett framgångsmeddelande.
Återanvänd mappen utan att förutsätta hur namnkonflikter hanteras
När det tillfälliga testet fungerar som förväntat ändrar du måltilldelningen till den utdatamapp du valt. Granska först innehållet och behåll samma förutsättning: allt inuti är utdata som kan ersättas, även dolda objekt och undermappar.
När en mapp rensas tas befintliga namn bort vid just det tillfället. Det avgör inte vad en senare export- eller sparåtgärd gör när två nya utdata har samma namn. Kontrollera alternativen och beskrivningen för den åtgärden i stället för att anta att återställningen aktiverar ersättning, sammanslagning eller automatisk namnändring. Apple tillhandahåller åtgärdsbeskrivningar via Visa info. Granska hur en åtgärd fungerar
Du kan också köra den sparade genvägen från Terminal med hela kommandot nedan. Apple beskriver hur man citerar genvägsnamn som innehåller blanksteg och anger att kommandot shortcuts returnerar 0 vid framgång eller 1 vid fel. Kör genvägar från kommandoraden
shortcuts run "Clear Demo Output"
Rensa och skapa utdata i en genomtänkt ordning: slutför den föregående omgången, rensa den valda mappen, kontrollera resultatet och skapa sedan nästa omgång. Då får den återanvändbara mappen ett tydligt syfte och upprepade körningar blir förutsägbara.
Källor
- Skapa en anpassad genväg på Mac — Apple Support.
- Navigera i åtgärdslistan i Genvägar på Mac — Apple Support.
- Avancerade inställningar för integritet och säkerhet i Genvägar på Mac — Apple Support.
- Använd åtgärden Show Alert i en genväg på Mac — Apple Support.
- Radera filer och mappar på Mac — Apple Support.
- Kör genvägar från kommandoraden — Apple Support.
- rm.1 — Apple Open Source Distributions.
- bash.1 — Apple Open Source Distributions.