Um Dateien im obersten Downloads-Ordner nach Dateiendungen in Ordner zu sortieren, verwende ein Skript, das nur Dateien direkt im Ordner prüft, Ordner wie txt und csv erstellt und vorhandene Zielnamen überspringt. Beginne mit dem entbehrlichen Beispiel unten, sieh dir die geplanten Verschiebungen an und führe das Skript anschließend im Terminal oder in Apple Kurzbefehle aus.
Diese Anleitung richtet sich an Mac-Nutzer, die lose Dateien physisch in Ordner verschieben und vorhandene Unterordner samt Inhalt unberührt lassen möchten. Die wichtigste Entscheidungshilfe ist ein Vorschaubericht: Für jede geeignete Datei wird ein Ziel vorgeschlagen, während Konflikte und nicht unterstützte Namen mit einer ausdrücklichen Meldung übersprungen werden.
Was wird verschoben und was bleibt an seinem Platz?
Der Finder bietet Sortier- und Gruppierungsoptionen sowie Ordner und intelligente Ordner. Apple erklärt, dass ein intelligenter Ordner passende Dateien gemeinsam anzeigt, ohne sie zu verschieben. Für diese Aufgabe sollen die Dateien tatsächlich in Ordnern nach Dateiendung abgelegt werden. Dateien im Finder auf dem Mac organisieren.
Öffne vor dem Prüfen des Beispiels den Finder und wähle Finder > Einstellungen > Erweitert. Aktiviere dann Alle Dateinamenerweiterungen einblenden. So sind die vom Sortierer verwendeten Endungen sichtbar. Das Anzeigen einer Dateiendung ändert das Dateiformat nicht. Dateinamenerweiterungen auf dem Mac ein- oder ausblenden.
Das folgende Skript verwendet bewusst festgelegte Regeln. Sie beschreiben diese Implementierung und nicht das allgemeine Verhalten des Finders oder von Kurzbefehle:
| Vorgefundener Eintrag | Verhalten des Sortierers |
|---|---|
Eine gewöhnliche Datei direkt im Ordner, etwa note.TXT |
Schlägt txt/note.TXT vor; der ursprüngliche Dateiname bleibt erhalten |
Ein zusammengesetzter Name wie bundle.tar.gz |
Verwendet die letzte Endung: gz/bundle.tar.gz |
| Eine Datei ohne Punkt oder mit einem Namen, der auf einen Punkt endet | Bleibt am Platz und wird mit einer Meldung übersprungen |
| Ein Ordner, auch wenn sein Name eine Dateiendung enthält | Bleibt samt Inhalt am Platz |
| Ein Name, der mit einem Punkt beginnt | Wird bei der Suche ausgeschlossen |
| Ein symbolischer Link | Bleibt am Platz |
| Eine Dateiendung mit anderen Zeichen als ASCII-Buchstaben und Ziffern oder mit mehr als 32 Zeichen | Bleibt am Platz und wird mit einer Meldung übersprungen |
| Ein vorhandenes Ziel mit demselben Dateinamen | Die Quelle bleibt am Platz; es wird ein Konflikt gemeldet |
| Ein Zielordnername, der bereits von einer regulären Datei oder einem symbolischen Link belegt ist | Der Ordner wird als blockiert gemeldet; die Quelle bleibt am Platz |
Die Einschränkungen für Dateiendungen sorgen für eine einfache und vorhersehbare Benennung der Ordner. Eine übersprungene Datei bleibt für eine manuelle Entscheidung verfügbar. Das Skript erfindet keinen Ersatznamen und verwirft die Datei nicht stillschweigend.
Ein entbehrliches Downloads-Beispiel erstellen
Öffne das Terminal und füge den folgenden vollständigen Einrichtungsblock ein. Er erstellt ausschließlich synthetische Textdateien in Downloads/ExtensionSortDemo. Einige davon haben beispielhafte Endungen wie .gz; ihr Inhalt besteht aus einfachem Beispieltext und nicht aus Daten in diesen Formaten. Wenn der Demo-Ordner bereits existiert, wird die Einrichtung abgebrochen. So wird ein früherer Test beim erneuten Ausführen nicht zurückgesetzt.
Apple beschreibt das Terminal als Möglichkeit, Befehle und Shell-Skripte auszuführen, und dokumentiert mv zum Verschieben lokaler Dateien. Hier bietet das Terminal eine gut lesbare Möglichkeit, jede geplante Verschiebung vor ihrer Ausführung zu prüfen. Was ist das Terminal auf dem Mac?, Dateien im Terminal auf dem Mac verwalten.
/bin/bash <<'BASH'
set -eu
demo="$HOME/Downloads/ExtensionSortDemo"
/bin/mkdir "$demo"
/bin/mkdir "$demo/nested" "$demo/txt"
printf 'sample text\n' > "$demo/sample.txt"
printf 'uppercase suffix example\n' > "$demo/note.TXT"
printf 'name,value\nblue,1\n' > "$demo/palette.csv"
printf 'synthetic compound-name example\n' > "$demo/bundle.tar.gz"
printf 'no extension example\n' > "$demo/README"
printf 'trailing dot example\n' > "$demo/trailing."
printf 'hidden example\n' > "$demo/.hidden.txt"
printf 'nested example\n' > "$demo/nested/inside.txt"
printf 'existing destination example\n' > "$demo/txt/sample.txt"
printf 'blocks creation of a csv folder\n' > "$demo/csv"
printf 'Created demo folder: %s\n' "$demo"
BASH
Öffne „Downloads“ im Finder und dann ExtensionSortDemo. Beachte die beiden unterschiedlichen Dateien mit dem Namen sample.txt: Eine liegt direkt im Demo-Ordner, die andere bereits in txt. Beachte auch, dass csv eine Datei ist. Damit werden zwei häufige Gründe getestet, aus denen eine Verschiebung übersprungen werden sollte.
Den Sortierer vor dem Verschieben prüfen
Füge das folgende vollständige Programm ins Terminal ein. Die anfängliche Einstellung lautet mode=preview. Das Skript meldet daher geplante Verschiebungen, ohne Ordner für Dateiendungen zu erstellen oder Dateien zu verschieben. Als Stammordner ist der entbehrliche Demo-Ordner eingestellt, nicht der gesamte Downloads-Ordner.
/bin/bash <<'BASH'
set -u
export LC_ALL=C
unset GLOBIGNORE
shopt -s nullglob
shopt -u dotglob
root="$HOME/Downloads/ExtensionSortDemo"
mode=preview
case "$mode" in
preview|move) ;;
*) printf 'Invalid mode\n' >&2; exit 1 ;;
esac
if [ ! -d "$root" ] || [ -L "$root" ]; then
printf 'Root must be an existing ordinary folder\n' >&2
exit 1
fi
for file in "$root"/*; do
if [ -L "$file" ] || [ ! -f "$file" ]; then
printf 'SKIP non-regular: %q\n' "$file"
continue
fi
name=${file##*/}
case "$name" in
*.*) ext=${name##*.} ;;
*) printf 'SKIP no extension: %q\n' "$name"; continue ;;
esac
case "$ext" in
''|*[!A-Za-z0-9]*)
printf 'SKIP unsupported extension: %q\n' "$name"
continue ;;
esac
if [ "${#ext}" -gt 32 ]; then
printf 'SKIP long extension: %q\n' "$name"
continue
fi
ext=$(printf '%s' "$ext" | /usr/bin/tr '[:upper:]' '[:lower:]')
folder="$root/$ext"
dest="$folder/$name"
if [ -L "$folder" ] || { [ -e "$folder" ] && [ ! -d "$folder" ]; }; then
printf 'SKIP blocked folder: %q\n' "$folder"
continue
fi
if [ -e "$dest" ] || [ -L "$dest" ]; then
printf 'SKIP collision: %q\n' "$dest"
continue
fi
if [ "$mode" = preview ]; then
printf 'WOULD MOVE %q -> %q\n' "$file" "$dest"
continue
fi
/bin/mkdir -p "$folder" || exit 1
/bin/mv -n "$file" "$dest" || exit 1
if [ -e "$file" ] || [ -L "$file" ]; then
printf 'NOT MOVED: %q\n' "$file" >&2
exit 1
fi
printf 'MOVED %q -> %q\n' "$file" "$dest"
done
printf 'Finished (%s). Review all SKIP lines.\n' "$mode"
BASH
Das Muster für direkte untergeordnete Elemente \"$root\"/* durchläuft keine Verzeichnisse. Die anschließenden Dateiüberprüfungen schließen dann Verzeichnisse und symbolische Links aus. nullglob behandelt einen leeren Ordner, ohne ein nicht zutreffendes Muster als Dateinamen zu verarbeiten; durch Deaktivieren von dotglob werden Namen ausgeschlossen, die mit einem Punkt beginnen. Diese Verhaltensweisen sind im von Apple bereitgestellten Bash-Handbuch dokumentiert. Bash-Handbuch.
Das Skript extrahiert die letzte Dateiendung und wandelt ihre Buchstaben mit tr in Kleinbuchstaben um. Deshalb behält note.TXT seinen Dateinamen, wird aber in txt abgelegt. Das Handbuch zu Apples tr dokumentiert die hier verwendete Zuordnung von Groß- zu Kleinbuchstaben. tr(1) — Zeichen übersetzen.
Die wichtigsten erwarteten Ergebnisse für diese Testdateien sind:
| Synthetische Quelldatei | Erwartetes Ergebnis der Vorschau |
|---|---|
note.TXT |
Würde nach txt/note.TXT verschoben |
bundle.tar.gz |
Würde nach gz/bundle.tar.gz verschoben |
sample.txt |
Konflikt mit txt/sample.txt; wird übersprungen |
palette.csv |
Der Ordnername csv ist durch eine Datei blockiert; wird übersprungen |
README |
Keine Dateiendung; wird übersprungen |
trailing. |
Leere Dateiendung; wird übersprungen |
nested/inside.txt |
Wird nicht geprüft |
.hidden.txt |
Wird nicht geprüft |
Dies sind erwartete Ergebnisse auf Dateisystemebene, keine Behauptung, dass die Verschiebungen während der Vorbereitung ausgeführt wurden. Das Programm hat eine Bash-Syntaxprüfung bestanden. Eine separate deterministische Überprüfung der Dateinamenzuordnung hat die Extraktion der Endung und die Umwandlung in Kleinbuchstaben bestätigt. Diese Vorbereitungsumgebung war schreibgeschützt, daher wurde der vollständige Verschiebungsablauf auf macOS nicht ausgeführt.
Die Beispieldateien verschieben und das Ergebnis prüfen
Wenn die Vorschau mit der Tabelle übereinstimmt, füge dasselbe vollständige Programm erneut ein und ändere dabei nur mode=preview in mode=move. Lasse den Demo-Stammordner für diesen Test unverändert.
Im Verschiebemodus erstellt mkdir -p den benötigten Ordner oder verwendet einen vorhandenen Ordner. Eine vorhandene gewöhnliche Datei wird dadurch nicht in einen Ordner umgewandelt. Deshalb prüft das Skript zuerst den Zielordner. mkdir(1) — Verzeichnisse erstellen.
Zum Verschieben wird macOS mv -n verwendet. Laut Dokumentation vermeidet dieser Befehl das Überschreiben vorhandener Dateien. Die vorherige Existenzprüfung ermöglicht eine verständliche Konfliktmeldung; die anschließende Prüfung der Quelldatei erkennt, wenn sie nach dem Verschieben noch vorhanden ist. Bei einem gemeldeten Befehlsfehler wird das Programm angehalten. mv(1) — Dateien verschieben.
Prüfe die Demo im Finder. note.TXT sollte sich in txt befinden und bundle.tar.gz in einem neu erstellten Ordner namens gz. Beide Versionen von sample.txt sollten weiterhin an ihren ursprünglichen Orten vorhanden sein. palette.csv sollte im obersten Ordner bleiben und nested/inside.txt weiterhin in nested liegen.
Die abschließende Zeile Finished bedeutet, dass die Suche abgeschlossen ist. Prüfe auch die Meldungen zu übersprungenen Dateien. Bei einem erneuten Durchlauf sollten die bereits sortierten Dateien in ihren Ordnern bleiben, da diese Ordner nicht rekursiv durchsucht werden.
Den gleichen Sortierer in Apple Kurzbefehle ausführen
Kurzbefehle kann als Schaltfläche für dieses Skript dienen. Apple dokumentiert die integrierte Unterstützung für das Schreiben und Ausführen von Shell-Skripten im Editor von Kurzbefehle. Das Shell-Programm übernimmt die Zuordnung der Dateiendungen und die Existenzprüfungen. Dieser Artikel geht nicht davon aus, dass eine native Dateiaktion beim Umgang mit Konflikten dasselbe Verhalten aufweist. Kurzbefehle für macOS kennenlernen.
Erstelle den Kurzbefehl manuell und lasse ihn während des Tests auf den Demo-Ordner verweisen:
- Öffne Kurzbefehle, klicke auf die Taste zum Hinzufügen und nenne den Kurzbefehl
Sort Extension Demo. - Suche in der Aktionsliste nach
Run Shell Scriptund füge die Aktion hinzu. - Stelle die Shell auf
/bin/bashein. Füge den vollständigen Sortierblock von oben in das Skriptfeld ein, einschließlich der einleitenden Zeile/bin/bashund der abschließenden BegrenzungszeileBASH. Lassemode=previewzunächst unverändert. - Füge nach der Skriptaktion
Quick Lookhinzu und verbinde die Ausgabe des Skripts damit. - Führe den Kurzbefehl aus und prüfe den Vorschaubericht, bevor du das Skript in
mode=moveänderst.
Apple beschreibt, wie Kurzbefehle durch Hinzufügen von Aktionen erstellt und getestet werden, und empfiehlt Quick Look, um Inhalte zu prüfen, die zwischen Aktionen weitergegeben werden. Einen eigenen Kurzbefehl auf dem Mac erstellen, Aktionen in Kurzbefehle auf dem Mac testen.
Dieser Kurzbefehl benötigt keine Eingabedateien, da der Stammordnerpfad im Skript festgelegt ist. Die erfolgreiche Ausgabe ist ein Textbericht, den Quick Look anzeigt. Dieser Bericht ist keine Sammlung verschobener Dateiobjekte, die an eine weitere Dateiaktion übergeben werden kann. Um die akzeptierte Eingabe und die resultierende Ausgabe einer Aktion in deiner installierten Version zu prüfen, klicke mit gedrückter Control-Taste auf ihr Symbol und wähle Show Info, wie von Apple dokumentiert. In Kurzbefehle auf dem Mac durch die Aktionsliste navigieren.
Falls Kurzbefehle verlangt, die Skriptausführung zu aktivieren, lautet die von Apple dokumentierte Einstellung Shortcuts > Settings > Advanced > Allow Running Scripts. Wenn die Shell-Aktion in deiner Installation nicht verfügbar ist, verwende das vollständige Terminal-Programm von oben. Es erledigt dieselbe Sortieraufgabe unabhängig davon. Erweiterte Datenschutz- und Sicherheitseinstellungen in Kurzbefehle auf dem Mac.
Die Regel auf den obersten Downloads-Ordner anwenden
Nach dem entbehrlichen Test ist für den tatsächlichen Downloads-Ordner nur eine einzeilige Ersetzung im Sortierer erforderlich. Dies ist ein Konfigurationsausschnitt, kein eigenständiges Sortierprogramm:
root="$HOME/Downloads"
Kehre zu mode=preview zurück, wenn du den Stammordner änderst. Prüfe jedes vorgeschlagene Ziel und jede Meldung zu übersprungenen Dateien, bevor du Verschiebungen aktivierst. Das Programm verarbeitet geeignete Dateien direkt im Ordner gemeinsam; eine individuelle Auswahlabfrage gibt es nicht.
Führe es manuell als Stapelverarbeitung in einem Ordner aus, in dem alle Dateien vollständig angekommen sind. Das Skript erkennt nicht, wann Downloads abgeschlossen sind, überwacht keine später hinzugefügten Dateien und koordiniert keine parallelen Ausführungen. Seine Prüfungen und die Verschiebung sind getrennte Vorgänge. Während der Ausführung sollten daher keine anderen Dateiaktionen im Ordner stattfinden. Eine Vorschau ist ein Bericht zum aktuellen Zustand und reserviert die Ziele nicht.
Prüfe bei einem Konflikt beide Dateien im Finder und entscheide, ob du die Datei im obersten Ordner umbenennst oder an ihrem Platz lässt. Bei einem blockierten Ordner für eine Dateiendung behebe zuerst das Problem mit dem Eintrag, der diesen Ordnernamen belegt, bevor du das Skript erneut ausführst. In keinem der beiden Fälle sollte das Programm Dateien überschreiben.
Prüfe zum Abschluss die tatsächlichen Zielordner im Finder und vergleiche die verbleibenden Dateien im obersten Ordner mit dem Bericht. Das entbehrliche Beispiel bietet einen konkreten Abnahmetest: Die vorgesehenen Dateien werden verschoben, vorhandene Namen bleiben erhalten und der Inhalt der Unterordner bleibt an seinem Ausgangsort.
Quellen
- Dateien im Finder auf dem Mac organisieren — Apple Support.
- Dateinamenerweiterungen auf dem Mac ein- oder ausblenden — Apple Support.
- Was ist das Terminal auf dem Mac? — Apple Support.
- Dateien im Terminal auf dem Mac verwalten — Apple Support.
- Bash-Handbuch — Apple OSS Distributions.
- tr(1) — Zeichen übersetzen — Apple OSS Distributions.
- mkdir(1) — Verzeichnisse erstellen — Apple OSS Distributions.
- mv(1) — Dateien verschieben — Apple OSS Distributions.
- Kurzbefehle für macOS kennenlernen — Apple Developer.
- Einen eigenen Kurzbefehl auf dem Mac erstellen — Apple Support.
- Aktionen in Kurzbefehle auf dem Mac testen — Apple Support.
- In Kurzbefehle auf dem Mac durch die Aktionsliste navigieren — Apple Support.
- Erweiterte Datenschutz- und Sicherheitseinstellungen in Kurzbefehle auf dem Mac — Apple Support.