Verwende Mac-Kurzbefehle, um Text an ein Shell-Skript zu übergeben, das die zuletzt geänderte Textdatei in einem lokalen Ordner auswählt und deinen Eintrag anhängt. Diese Anleitung verwendet entbehrliche Beispieldateien und bricht ab, wenn der Ordner leer ist oder der neueste Zeitstempel mehrfach vorkommt.

Die Aufgabe ist hier klar umrissen: einem vorhandenen Nur-Text-Dokument einen kurzen Eintrag hinzufügen, ohne die Datei jedes Mal manuell auszuwählen. Apple dokumentiert die Unterstützung von Shell-Skripten in Mac-Kurzbefehlen. Der folgende Ablauf kombiniert diese unterstützte Funktion mit der dokumentierten Auswahl und dem Anhängen von Dateien in zsh. Kurzbefehle für macOS kennenlernen

Festlegen, was „neueste Datei“ bedeutet

In diesem Artikel bedeutet „neueste“ zuletzt geändert. Das Skript berücksichtigt nur sichtbare reguläre Dateien, deren Namen auf .txt in Kleinbuchstaben enden und die sich direkt im angegebenen Ordner befinden. Unterordner und symbolische Links werden ausgeschlossen. Diese Auswahlregeln basieren auf den Dateinamensmustern und Qualifizierern von zsh. Expansion

Diese Definition wirkt sich auf wiederholte Ausführungen aus. Nachdem du Text an eine Datei angehängt hast, ändert sich ihre Änderungszeit, sodass sie im Allgemeinen die neueste geeignete Datei bleibt. Wenn du stattdessen dem zuletzt neu erstellten Dokument folgen möchtest, gilt eine andere Regel für die Änderungszeit. Gehe nicht davon aus, dass dieser Ablauf nach dem Erstellungsdatum auswählt.

Bevor du den Kurzbefehl erstellst, wähle die Regel, die zu deiner Aufgabe passt:

Deine beabsichtigte Aufgabe Passt dieses Beispiel?
An die zuletzt bearbeitete .txt-Datei anhängen Ja
An die Datei mit dem neuesten Datum im Namen anhängen Nein; Dateinamen werden nicht als Datumsangaben interpretiert
An die zuletzt erstellte Datei anhängen Nein; die Erstellungszeit wird nicht verwendet
Dateien in Unterordnern einbeziehen Nein; die Auswahl ist auf einen Ordner begrenzt
An ein Rich-Text-Dokument oder PDF anhängen Nein; dieses Beispiel schreibt Nur-Text

Der Finder bietet eine nützliche Sichtprüfung. Öffne den Ordner in der Listenansicht und klicke auf die Spaltenüberschrift Änderungsdatum; klicke bei Bedarf erneut, damit das neueste Objekt zuerst angezeigt wird. Apple dokumentiert sowohl das Sortieren nach Spalten als auch das Umkehren der Reihenfolge. Die Finder-Anzeige hilft dir, das Ergebnis zu prüfen, aber das Skript führt seine eigene Auswahl durch. Objekte im Finder auf dem Mac sortieren und anordnen

Einen entbehrlichen Beispielordner erstellen

Das Beispiel verwendet einen Ordner namens Shortcut Append Demo in deinem Benutzerordner. Die Einrichtung bricht absichtlich ab, wenn dieser Name bereits vorhanden ist, statt dessen Inhalt wiederzuverwenden. Sie erstellt zwei künstliche Textdateien mit einem Abstand von zwei Sekunden, damit die zweite Datei eine spätere Änderungszeit haben sollte.

Öffne Terminal, füge den vollständigen Einrichtungsblock ein und drücke die Eingabetaste. Das in Anführungszeichen gesetzte Here-Dokument führt die Befehle in einem separaten zsh-Prozess aus, sodass dieser Prozess bei einem Fehler während der Einrichtung beendet wird.

/bin/zsh <<'ZSH'
emulate -L zsh
setopt ERR_EXIT
folder="$HOME/Shortcut Append Demo"

if ! /bin/mkdir "$folder"; then
  printf '%s\n' 'Setup stopped: use a new folder name if this one exists.' >&2
  exit 1
fi

printf '%s\n' 'Sample entry: blue notebook.' > "$folder/older.txt"
/bin/sleep 2
printf '%s\n' 'Sample entry: green notebook.' > "$folder/newer.txt"
printf 'Example folder: %s\n' "$folder"
ZSH

Bei der Einrichtung wird die Ausgabeumleitung verwendet, um Dateien erst zu erstellen, nachdem der neue Ordner erfolgreich angelegt wurde. Apple unterscheidet zwischen der normalen Ausgabeumleitung, die die Befehlsausgabe in eine Datei schreibt, und der Umleitung zum Anhängen, die die Ausgabe am Ende hinzufügt. Terminal-Eingabe und -Ausgabe auf dem Mac umleiten

Wenn die Einrichtung meldet, dass der Ordner bereits vorhanden ist, wähle einen anderen entbehrlichen Namen und ändere die Ordnerzuweisung sowohl in der Einrichtung als auch im folgenden Skript für den Kurzbefehl. Führe nicht einzelne Zeilen zum Schreiben von Dateien erneut für einen vorhandenen Ordner aus.

Den Kurzbefehl erstellen und die Texteingabe erhalten

Erstelle in der App „Kurzbefehle“ einen neuen Kurzbefehl und nenne ihn An neueste Textdatei anhängen. Verwende die Aktionssuche, um die folgenden Aktionen hinzuzufügen. Apple dokumentiert, wie du die Aktionsbibliothek durchsuchst und über Info einblenden prüfst, welche Eingabe eine Aktion akzeptiert und welche Ausgabe sie erzeugt. In der Aktionsliste in Kurzbefehle auf dem Mac navigieren

  1. Füge eine Aktion Text mit dem künstlichen Eintrag Sample entry: orange notebook. hinzu.
  2. Füge direkt danach Shell-Skript ausführen hinzu.
  3. Stelle die Shell auf /bin/zsh ein.
  4. Lege als Skripteingabe die Ausgabe der vorherigen Aktion Text fest.
  5. Stelle Eingabe übergeben auf als Argumente ein.
  6. Ersetze das Skriptfeld durch das vollständige Skript im nächsten Abschnitt.

Die vorgesehene Verbindung lautet ein Textwert als ein Skriptargument. Das Skript liest dieses Argument als $1. Bei Erfolg gibt es eine Textbestätigung mit dem Zielpfad aus. Dieser Pfad ist kein Kurzbefehle-Dateiobjekt, und die Ausgabe enthält nicht den vollständigen Dateiinhalt.

Lass die Eingabe mit der Ausgabe der Aktion Text verbunden. Eine Datei, eine Liste von Dateinamen oder eine andere, nicht zum Kurzbefehl gehörende Eingabe würde ändern, was das Skript erhält. Das Skript prüft die Anzahl der Argumente, damit eine unerwartete Sammlung von Eingaben nicht zu mehreren angehängten Einträgen wird.

Wenn Skripte deaktiviert sind, öffne Kurzbefehle > Einstellungen, wähle Erweitert und aktiviere Skriptausführung erlauben. Apple dokumentiert diese Einstellungen, mit denen Skripte in Kurzbefehlen erlaubt werden. Anleitung von Apple zu den Skripteinstellungen

Das Skript zum Auswählen und Anhängen hinzufügen

Füge dieses vollständige Programm in Shell-Skript ausführen ein. Es benötigt weder heruntergeladene Werkzeuge noch eine separate Skriptdatei. Die Ordnerzuweisung stimmt mit der obigen Einrichtung des entbehrlichen Beispiels überein.

emulate -L zsh
unsetopt CLOBBER APPEND_CREATE

fail() {
  printf '%s\n' "$1" >&2
  exit 1
}

(( $# == 1 )) || fail 'Expected exactly one text input.'
[[ -n "$1" ]] || fail 'The text input is empty.'

folder="$HOME/Shortcut Append Demo"
[[ -d "$folder" ]] || fail 'The example folder does not exist.'

files=( "$folder"/*.txt(N.om) )
(( ${#files} > 0 )) || fail 'No eligible .txt files were found.'

newest="${files[1]}"

if (( ${#files} > 1 )); then
  [[ "$newest" -nt "${files[2]}" ]] ||
    fail 'The newest timestamp is tied or the folder changed. Check the files.'
fi

[[ -f "$newest" && ! -L "$newest" ]] ||
  fail 'The selected file is no longer an eligible regular file.'
[[ -w "$newest" ]] || fail 'The selected file is not writable.'

if ! printf '\n%s\n' "$1" >> "$newest"; then
  fail 'Append failed; inspect the selected file before retrying.'
fi

printf 'Appended to: %s\n' "$newest"

Der Auswahl-Ausdruck erstellt ein Array mit den Pfaden der passenden Dateien. In (N.om) erlaubt N ein leeres Suchergebnis, . beschränkt die Treffer auf reguläre Dateien und om sortiert nach Änderungszeit, wobei die jüngste Datei an erster Stelle steht. Durch das Speichern der Pfade in einem Array werden Dateinamen mit Leerzeichen nicht aufgeteilt. Expansion

Bei der nächsten Prüfung muss die erste Datei strikt neuer sein als die zweite. Haben beide dieselbe Änderungszeit, bricht der Kurzbefehl ab, statt stillschweigend eine Datei auszuwählen. zsh dokumentiert -nt zum Vergleichen des Dateialters sowie die hier verwendeten Prüfungen auf reguläre Dateien, symbolische Links und beschreibbare Dateien. Bedingte Ausdrücke

Der Anhängebefehl verwendet ein festes printf-Format und übergibt deinen Eintrag als %s-Argument. Prozentzeichen und Backslashes im Eintrag werden daher als Text behandelt und nicht als zusätzliche Formatierungsanweisungen. Der anfängliche Zeilenumbruch trennt den Eintrag vom vorhandenen Text; der abschließende Zeilenumbruch beendet ihn. Endet die Datei bereits mit einem Zeilenumbruch, entsteht zwischen den Einträgen eine Leerzeile. Shell-Builtin-Befehle

Das Skript setzt außerdem CLOBBER und APPEND_CREATE zurück. Sind beide Optionen nicht gesetzt, schlägt die Umleitung zum Anhängen laut zsh fehl, wenn das Ziel nicht existiert. Das ist wichtig, falls die ausgewählte Datei vor dem Anhängen verschwindet: Das Skript sollte dann einen Fehler melden, statt unter dem alten Pfad einen Ersatz anzulegen. Umleitung

Das Ergebnis mit den Beispieldateien prüfen

Führe den Kurzbefehl einmal aus. Bei einem unveränderten Beispielordner sollte das Ziel newer.txt sein. Öffne die Datei und prüfe, ob sie folgenden Inhalt hat. Dies ist das auf Grundlage des Beispiels erwartete Ergebnis und keine Behauptung, dass ein Mac-Test in der Benutzeroberfläche durchgeführt wurde.

Sample entry: green notebook.

Sample entry: orange notebook.

Öffne auch older.txt. Die Datei sollte weiterhin nur Sample entry: blue notebook. enthalten. Wenn du beide Dateien prüfst, bestätigst du die zwei Teile der Aufgabe: ein Ziel auswählen und die andere Datei unverändert lassen.

Probiere einen zweiten künstlichen Eintrag aus, indem du die Aktion Text in Sample entry: yellow notebook. änderst und den Kurzbefehl erneut ausführst. In newer.txt sollte ein weiterer, durch eine Leerzeile getrennter Eintrag erscheinen, sofern keine andere geeignete Datei inzwischen neuer geworden ist. Wenn du den Kurzbefehl zweimal mit derselben Eingabe ausführst, wird diese Eingabe zweimal angehängt. Das Programm erkennt keine doppelten Einträge.

Diese Beispiele wurden anhand der Dokumentation geprüft, aber hier nicht ausgeführt: In der verfügbaren Umgebung sind weder macOS-Kurzbefehle noch zsh vorhanden. Prüfe die entbehrlichen Dateien auf deinem Mac, bevor du die Ordnerzuweisung anpasst.

Leere Ordner, Namenskonflikte und Dateiänderungen verstehen

Der Ablauf setzt ein vorhandenes Ziel voraus. Ein nicht vorhandener Ordner, ein leerer Ordner oder ein Ordner, der nur ungeeignete Objekte enthält, führt vor dem Anhängen zu einem Fehler. Es wird weder eine Standarddatei erstellt noch ein Unterordner ausgewählt oder auf ein Dokument mit anderem Namen ausgewichen.

Namenskonflikte werden dadurch vermieden, dass überhaupt kein Ziel erstellt wird. Die Einrichtung bricht ab, wenn der Ordnername bereits vorhanden ist. Bei normalen Ausführungen des Kurzbefehls behält die ausgewählte Datei ihren Namen: Das Skript benennt sie weder um noch speichert es eine zweite Kopie. Das Verhalten bei einer fehlenden Datei wird durch die dokumentierten zsh-Optionen für das Anhängen gesteuert. Umleitung

Verwende diese kurze Diagnosefolge, wenn das Ergebnis von deiner Erwartung abweicht:

  1. Ordnerzuweisung prüfen. Sie muss mit dem bei der Einrichtung erstellten Ordner übereinstimmen.
  2. Eignung prüfen. Das Beispielmuster umfasst sichtbare reguläre Dateien, die auf .txt in Kleinbuchstaben enden und sich in der obersten Ordnerebene befinden.
  3. Änderungsreihenfolge prüfen. Kontrolliere das Änderungsdatum im Finder. Denke daran, dass eine Bearbeitung eine Datei zum nächsten Ziel machen kann.
  4. Gleiche Zeitstempel prüfen. Bearbeite und sichere die vorgesehene Beispieldatei später und kontrolliere anschließend die Reihenfolge erneut.
  5. Aktionsverbindung prüfen. Ein einzelner Textwert muss die Shell als ein Argument erreichen.

Das Skript ist für einen Ordner vorgesehen, dessen Inhalt sich während der Ausführung nicht ändert. Auswahl und Schreiben sind getrennte Vorgänge: Ein anderer Prozess könnte eine Datei dazwischen bearbeiten, ersetzen oder hinzufügen. Die Prüfungen machen den Ablauf nicht zu einer Transaktion, und ein Schreibfehler kann einen teilweise angehängten Eintrag hinterlassen. Prüfe die Datei, bevor du es nach einem Fehler beim Anhängen erneut versuchst.

Wann native Dateifilter sinnvoll sind

Apple dokumentiert Dateien filtern als Aktion, die Inhalte akzeptiert, sie anhand von Filtern eingrenzt und die passenden Ergebnisse weitergibt. Mit den allgemeinen Filteroptionen lassen sich Ergebnisse sortieren und ihre Anzahl begrenzen. Diese Vorgänge helfen dabei, eine Datei auszuwählen; sie hängen selbst keinen Text an. Einführung in die Aktionen „Suchen“ und „Filtern“, Filterparameter hinzufügen

In dieser Anleitung erfolgen Auswahl und Schreiben gemeinsam im Shell-Skript, damit Dateimuster, Verhalten bei gleichen Zeitstempeln und die Voraussetzung einer vorhandenen Datei klar festgelegt sind. Wenn du eine andere Abfolge mit Dateiaktionen erstellst, prüfe zuerst bei jeder Aktion Info einblenden: Ein Datei-Ergebnis, Dateiinhalt, der in Text umgewandelt wurde, und ein als Text dargestellter Pfad sind unterschiedliche Werte. Apple stellt diese Aktionsbeschreibungen bereit, damit Eingabe- und Ausgabetypen erkennbar sind. In der Aktionsliste in Kurzbefehle auf dem Mac navigieren

Wenn das Beispiel wie erwartet funktioniert, behalte beim Anpassen denselben klaren Rahmen bei: ein Texteintrag, ein bestimmter lokaler Ordner und genau eine strikt neueste geeignete Datei. So bleibt jede Ausführung vorhersehbar, und du weißt, wo du nachsehen musst, wenn der Kurzbefehl abbricht.

Quellen