Um einen wiederverwendbaren Ausgabeordner zu leeren und den Ordner selbst zu behalten, erstelle einen Mac-Kurzbefehl, der nur dessen Inhalte entfernt. Diese Anleitung verwendet einen festen Ordner, entbehrliche Textdateien und ein Shell-Skript, das den Ordner vor dem Leeren überprüft.
Ziel ist es, einen Ordner zwischen Stapeln erzeugter Dateien zurückzusetzen. Das Beispiel enthält gewöhnliche Dateien, einen Dateinamen mit Leerzeichen, eine versteckte Datei und einen verschachtelten Ordner. Das Skript entfernt diese Inhalte direkt; es verschiebt sie nicht in den Papierkorb. Apples veröffentlichtes Handbuch rm dokumentiert das rekursive Entfernen und die Fehlermeldung. Apples Handbuch rm
Festlegen, was nach dem Leeren übrig bleiben soll
Bei diesem Ablauf soll am selben Pfad ein vorhandener, leerer Ordner zurückbleiben. Auch Unterordner darin zählen zu den Ausgabedaten und werden samt Inhalt entfernt. Wenn dein Ausgabeverzeichnis Vorlagen oder eine dauerhafte Unterordnerstruktur enthält, benötigt dieses Skript vor der Verwendung eine andere Auswahlregel.
Das Beispielziel ist Shortcut Output Demo direkt in deinem Benutzerordner. Durch das feste Ziel lässt sich der Kurzbefehl leicht überprüfen: Sein Verhalten hängt weder davon ab, welches Finder-Fenster geöffnet ist, noch davon, welche Datei ausgewählt ist.
| Anforderung | Verhalten in dieser Anleitung |
|---|---|
| Ausgabeordner erhalten | Nur untergeordnete Pfade werden an rm übergeben |
| Versteckte Ausgabedaten einbeziehen | Bash-Option dotglob schließt Namen mit vorangestelltem Punkt ein |
| Einen bereits leeren Ordner behandeln | Eine leere Liste untergeordneter Elemente wird akzeptiert |
| Einen fehlenden Ordner behandeln | Mit einer Fehlermeldung abbrechen; nicht neu erstellen |
| Verschachtelte Ausgabedaten entfernen | Jeden untergeordneten Ordner rekursiv entfernen |
| Die Möglichkeit erhalten, im Finder „Zurücklegen“ zu verwenden | Stattdessen die Finder-Alternative weiter unten verwenden |
Der Finder bietet eine praktische Alternative, wenn die Elemente im Papierkorb bleiben sollen. Öffne den Ausgabeordner, wähle die darin enthaltenen entbehrlichen Elemente aus und drücke Command-Delete. Lass den übergeordneten Ordner abgewählt. Apple erklärt, dass in den Papierkorb verschobene Elemente dort bleiben, bis er geleert wird, und mit Ablage > Zurücklegen wiederhergestellt werden können. Dateien und Ordner auf dem Mac löschen
Einen entbehrlichen Ordner für den ersten Durchlauf erstellen
Öffne Terminal und füge den vollständigen Einrichtungsblock unten ein. Er erstellt ausschließlich künstliche Textdateien. Der anfängliche Befehl mkdir muss erfolgreich sein, bevor Dateien geschrieben werden. Ist bereits eine Datei oder ein Ordner namens Shortcut Output Demo vorhanden, wird die Einrichtung daher abgebrochen, statt dessen Inhalt wiederzuverwenden.
/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
Öffne deinen Benutzerordner im Finder und suche Shortcut Output Demo. Darin befinden sich drei sichtbare Elemente: alpha.txt, sample output.txt und Batch. Das vierte Element, .demo-marker, ist absichtlich versteckt. In Batch befindet sich nested.txt. Dies sind beispielhafte Testeingaben, keine vorhandenen Benutzerdateien.
Wird die Einrichtung abgebrochen, weil der Name bereits existiert, lass das vorhandene Element unverändert. Wähle einen anderen, noch nicht verwendeten Namen für das Beispiel und ändere die Zielzuweisung sowohl in der Einrichtung als auch im Skript zum Leeren entsprechend. Entferne nicht einfach die anfängliche Prüfung auf vorhandene Elemente, um den Namenskonflikt zu umgehen.
Den Kurzbefehl erstellen und Ein- und Ausgabetypen beibehalten
Klicke in der App „Kurzbefehle“ auf die Taste zum Hinzufügen, um einen Kurzbefehl zu erstellen, und nenne ihn Clear Demo Output. Suche in der Aktionsliste nach Run Shell Script und füge diese Aktion hinzu. Apple dokumentiert, wie Kurzbefehle durch Hinzufügen von Aktionen erstellt und Aktionen anhand ihres Namens in der Aktionsliste gesucht werden. Einen eigenen Kurzbefehl auf dem Mac erstellen, In der Aktionsliste in Kurzbefehle auf dem Mac navigieren
Setze für die Aktion Shell auf /bin/bash und ersetze dann die Beispielbefehle durch das vollständige Skript zum Leeren unten. Das Skript verwendet Bash-Arrays und shopt; lass daher diese Shell ausgewählt. Es liest das Ziel aus der Zuweisung im Skript. Es verwendet weder die Eingabe des Kurzbefehls noch die Standardeingabe oder Befehlszeilenargumente.
Wenn Skripte deaktiviert sind, wähle Kurzbefehle > Einstellungen, öffne Erweitert und aktiviere Ausführen von Skripten erlauben. Apple dokumentiert diese Einstellung zum Ausführen von Skripten in Kurzbefehlen. Apples Einstellung zum Ausführen von Skripten
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"
Die erfolgreiche Ausgabe der Aktion ist Text: eine Zeile, die mit Folder is empty: beginnt. Es handelt sich weder um ein Ordnerobjekt noch um eine Liste der gelöschten Dateien oder einen Verweis auf das wiederverwendbare Verzeichnis. Wenn du den Kurzbefehl später erweiterst, übergib das Zielverzeichnis ausdrücklich an jede Aktion, die einen Ordner erwartet. Apples Infobereich zu Aktionen nennt die akzeptierten Eingaben und die erzeugte Ausgabe. Klicke bei gedrückter Control-Taste auf das Symbol einer Aktion und wähle Informationen anzeigen, um diese Angaben zu prüfen. Informationen zu Aktionseingaben und -ausgaben anzeigen
Für eine sichtbare Abschlussmeldung füge nach dem Skript Show Alert hinzu und setze die Ausgabevariable des Skripts in die Meldung ein. Apple dokumentiert, wie die Ausgabe einer vorherigen Aktion zur Überprüfung an Show Alert übergeben wird. Eine feste Meldung, die besagt, dass der Ordner leer ist, wäre weniger hilfreich als die tatsächliche Ausgabe des Skripts. Die Aktion „Show Alert“ in einem Kurzbefehl auf dem Mac verwenden
Verstehen, warum der Ordner erhalten bleibt
Die Zuweisung items=( "$target"/* ) sammelt die Pfade der untergeordneten Elemente. Die Schleife übergibt jedes Element einzeln an rm; sie übergibt niemals \"$target\" selbst. Das rekursive Entfernen betrifft daher die Ausgabeunterordner, während der wiederverwendbare übergeordnete Ordner erhalten bleibt.
Zwei Bash-Optionen helfen bei häufigen Problemen beim Zurücksetzen. dotglob schließt Dateinamen ein, die mit einem Punkt beginnen, und nullglob bewirkt, dass ein nicht passendes Muster zu nichts erweitert wird. Durch die Anführungszeichen bei der Array-Erweiterung bleiben Dateinamen mit Leerzeichen einzelne Argumente. Diese Verhaltensweisen sind in Apples mitgeliefertem Bash-Handbuch dokumentiert. Bash-Handbuch: Pfadnamenerweiterung und Arrays
Der Löschbefehl verwendet -R für verschachtelte Ordner und --, um die Optionsauswertung zu beenden. Er prüft das Ergebnis jedes Befehls und bricht bei einem Fehler ab. Apples Handbuch zu rm gibt bei einem Fehler einen von null verschiedenen Exit-Status an. Das Entfernen erfolgt nicht als Transaktion: Ein Fehler bei einem späteren Element stellt bereits entfernte Elemente nicht wieder her. Apples Handbuch zu rm
Das Skript weist außerdem ein Ziel zurück, bei dem es sich um einen symbolischen Link handelt. Verwende dieses Beispiel nur für einen gewöhnlichen lokalen Ausgabeordner, der keine eingehängten Volumes enthält. Beende jeden Prozess, der Ausgabedaten erzeugt, bevor du den Ordner leerst: Dateien, die während oder nach dem Durchlauf erstellt werden, können dazu führen, dass der Ordner nicht leer bleibt.
Den ersten und wiederholte Durchläufe überprüfen
Führe den Kurzbefehl über die Ausführen-Taste im Editor aus. Überprüfe das Ergebnis anhand der folgenden Schritte, bevor du den Zielpfad anpasst. Apple dokumentiert das Testen eines eigenen Kurzbefehls im Editor. Einen eigenen Kurzbefehl testen
- Vergewissere dich, dass
Shortcut Output Demoim Finder weiterhin vorhanden ist. - Vergewissere dich, dass die sichtbaren Beispieldateien und der Ordner
Batchverschwunden sind. - Vergewissere dich, dass das Skript seine Meldung für den leeren Ordner ausgegeben hat; die abschließende Prüfung berücksichtigt auch versteckte Elemente.
- Führe den Kurzbefehl erneut aus. Bei einem bereits leeren Ordner sollte dieselbe Meldung erscheinen.
- Benenne den leeren Beispielordner vorübergehend um und führe den Kurzbefehl erneut aus. Das Skript sollte mit der Fehlermeldung zum vorhandenen Ordner abbrechen. Stelle den ursprünglichen Namen anschließend wieder her.
Das Skript zum Leeren hat die Bash-Syntaxprüfung mit bash -n bestanden. Für diesen Artikel wurde es nicht in den macOS-Kurzbefehlen ausgeführt; daher gehört der erste Durchlauf mit entbehrlichen Beispieldaten weiterhin zur Einrichtung.
Wenn das Entfernen fehlschlägt, prüfe das gemeldete Element und den verbleibenden Ordnerinhalt, bevor du es erneut versuchst. Ein fehlendes Ziel, ein nicht lesbares Verzeichnis und ein fehlgeschlagenes Entfernen sind unterschiedliche Zustände; das Skript gibt dafür keine Erfolgsmeldung aus.
Den Ordner wiederverwenden, ohne von einer Behandlung von Namenskonflikten auszugehen
Sobald der Test mit den entbehrlichen Daten wie erwartet funktioniert, ändere die Zielzuweisung auf deinen gewünschten Ausgabeordner. Prüfe zuerst dessen Inhalt und halte dich an dieselbe Vorgabe: Alles darin ist ersetzbare Ausgabe, einschließlich versteckter Elemente und Unterordner.
Beim Leeren eines Ordners werden die zu diesem Zeitpunkt vorhandenen Namen entfernt. Dadurch ist nicht festgelegt, wie ein späterer Export- oder Speichervorgang mit zwei neuen Ausgabedateien gleichen Namens umgeht. Prüfe die Optionen und Beschreibung der jeweiligen Aktion, statt anzunehmen, dass dieses Zurücksetzen Ersetzen, Zusammenführen oder automatisches Umbenennen ermöglicht. Apple stellt Aktionsbeschreibungen über Show Info bereit. Das Verhalten einer Aktion prüfen
Du kannst den gespeicherten Kurzbefehl auch über Terminal mit dem vollständigen Befehl unten ausführen. Apple dokumentiert das Setzen von Anführungszeichen bei Kurzbefehl-Namen mit Leerzeichen und gibt an, dass der Befehl shortcuts bei Erfolg 0 und bei einem Fehler 1 zurückgibt. Kurzbefehle über die Befehlszeile ausführen
shortcuts run "Clear Demo Output"
Leere den Ordner und erzeuge Ausgabedaten in einer festgelegten Reihenfolge: Schließe den vorherigen Stapel ab, leere den ausgewählten Ordner, prüfe das Ergebnis und erstelle dann den nächsten Stapel. So hat der wiederverwendbare Ordner einen klaren Zweck, und wiederholte Durchläufe bleiben vorhersehbar.
Quellen
- Einen eigenen Kurzbefehl auf dem Mac erstellen — Apple Support.
- In der Aktionsliste in Kurzbefehle auf dem Mac navigieren — Apple Support.
- Erweiterte Einstellungen zu Datenschutz und Sicherheit in Kurzbefehle auf dem Mac — Apple Support.
- Die Aktion „Show Alert“ in einem Kurzbefehl auf dem Mac verwenden — Apple Support.
- Dateien und Ordner auf dem Mac löschen — Apple Support.
- Kurzbefehle über die Befehlszeile ausführen — Apple Support.
- rm.1 — Apple Open Source Distributions.
- bash.1 — Apple Open Source Distributions.