rsync -avn, find … -print und git clean -nd drucken genau das, was die zerstörerische Variante täte — und von ihr trennt sie ein einziges Flag. Die Gewohnheit ist immer dieselbe: im Zeig-mir-Modus starten, die Liste lesen, das Flag entfernen. Die Ausnahme ist rm: es hat keinen solchen Modus, und der Umweg zählt.
1. rsync: -n zeigt, was kopiert würde
$ clai zeige was rsync kopieren würde ohne es zu kopieren→ rsync -avn src/ backup/sending incremental file listapp.pyutil.pylogs/logs/app.logsent 159 bytes received 29 bytes 376.00 bytes/sectotal size is 8 speedup is 0.04 (DRY RUN)
Die letzten zwei Wörter, (DRY RUN), sind der einzige Unterschied in der Ausgabe. Die Dateiliste ist identisch zum echten Lauf — -n weg, und genau diese Dateien werden kopiert.
2. rsync --delete: die Kombination, die zubeißt
$ clai zeige was rsync im ziel löschen würde→ rsync -avn --delete src/ backup/sending incremental file listdeleting old-report.csvdeleting obsolete.py./notes.txtutil.pylogs/old.log
Die deleting-Zeilen sind der ganze Grund für -n. Ohne es verschwinden diese zwei Dateien lautlos — geprüft: derselbe Lauf ohne -n druckte dieselben zwei Zeilen und löschte sie.
3. find: erst -print, dann -delete
$ clai zeige logs älter als 30 tage ohne sie zu löschen→ find src -name '*.log' -mtime +30 -printsrc/logs/old.log
find wertet seine Tests von links nach rechts aus, deshalb zeigt -print am Ende exakt die Liste, die -delete bekäme. Niemals vertauschen: -delete -name '*.log' löscht erst den ganzen Baum und filtert danach.
4. git clean: -n druckt, was es entfernen würde
$ clai zeige welche nicht versionierten dateien git clean entfernen würde→ git clean -ndWould remove backup/Would remove src/notes.txtWould remove tmpdir/
-n ist die Prüfung, -d bezieht Verzeichnisse ein. git clean -fd ohne vorherigen -nd-Durchgang ist der schnellste Weg, eine Datei zu verlieren, die Sie nicht gestaged hatten.
5. sed: die Vorschau ist sed ohne -i
$ clai zeige wie die ersetzung in conf.ini aussähe ohne die datei zu ändern→ sed 's/old/new/' conf.inihost=newport=80
Ohne -i druckt sed das Ergebnis ins Terminal und lässt die Datei in Ruhe — das ist sein eingebauter Trockenlauf. Geprüft: cat conf.ini zeigt danach weiterhin host=old.
6. Wenn die Änderung doch hineingeht — eine Kopie behalten
$ clai ersetze in conf.ini aber behalte eine sicherungskopie→ sed -i.bak 's/old/new/' conf.ini
Daneben entsteht conf.ini.bak mit dem alten Inhalt. Unter macOS ist das Suffix Pflicht, selbst leer (-i '') — genau das Detail, an dem von Linux übernommene Skripte scheitern.
Gotchas
rmhat keinen Trockenlauf. Der Ersatz ist dasselbe Muster mitls:ls -1 src/logs/*.logzeigt exakt, wasrm src/logs/*.logmitnähme. Auchecho rm …taugt — es druckt den fertigen Befehl, statt ihn auszuführen.-nbedeutet je nach Befehl etwas anderes. Bei rsync Trockenlauf, beigrep -nZeilennummern, beisort -nnumerische Sortierung. Übertragen Sie die Gewohnheit nicht blind: find nennt es-print, git nennt es--dry-run.- Prüfung und Ausführung dürfen sich um genau ein Flag unterscheiden. Haben Sie dazwischen auch Pfad, Muster oder Argumentreihenfolge geändert, haben Sie einen anderen Befehl geprüft. Löschen Sie das
-naus der bereits getippten Zeile, statt sie neu zu tippen.
Related questions
Haben Paketmanager einen Trockenlauf? Ja: apt-get -s install paket zeigt den Plan ohne Installation, dnf hat --assumeno, docker docker system prune --dry-run.
Wie prüfe ich, was ein Skript tut? bash -n script.sh prüft die Syntax, ohne etwas auszuführen; bash -x script.sh druckt jeden Befehl beim Ausführen — es führt ihn aber aus.
Lässt sich rsync --delete rückgängig machen? Nein. Schutz bieten nur -n vorher oder --backup --backup-dir=…, das die betroffenen Dateien beiseitelegt statt sie zu löschen.
See also
- Dateien löschen, die älter als N Tage sind
- Dateien kopieren und die Ordnerstruktur behalten
- Suchen und Ersetzen über alle Dateien
CliAI kennzeichnet einen zerstörerischen Befehl als CAUTION oder DANGER und bietet zuerst dessen Trockenlauf an. In einer Zeile installieren.