Ich habe einige Dateien in einem Batch-Skript umbenannt. Gibt es eine Möglichkeit, die Änderungen rückgängig zu machen, ohne sie erneut umbenennen zu müssen?
Bietet Linux eine native Art zu arbeiten undo
?
Ich habe einige Dateien in einem Batch-Skript umbenannt. Gibt es eine Möglichkeit, die Änderungen rückgängig zu machen, ohne sie erneut umbenennen zu müssen?
Bietet Linux eine native Art zu arbeiten undo
?
Antworten:
Linux bietet (wie andere Unices auch) von Haus aus keine Funktion zum Rückgängigmachen. Die Philosophie ist, dass wenn es weg ist, es weg ist. Wenn es wichtig war, hätte es gesichert werden müssen.
Es gibt ein Fuse-Dateisystem, das Kopien alter Versionen automatisch aufbewahrt: copyfs , das in allen guten Distributionen verfügbar ist. Das kann natürlich eine Menge Ressourcen verbrauchen.
Der beste Schutz gegen solche Unfälle ist die Verwendung eines Versionskontrollsystems (cvs, bazaar, darcs, git, mercurial, subversion, ...). Das Erlernen dauert ein wenig, zahlt sich aber mittel- und langfristig aus.
Unglücklicherweise nicht.
-i
Option rm
standardmäßig aktiviert ist. Meine Unix-Systeme sollten meine Hand nicht halten.
Nein, es gibt in keinem Unix ein magisches Rückgängigmachen. Unix setzt voraus, dass Sie wissen, was Sie tun. Verwenden Sie zur Rückgängig-Unterstützung ein VCS (in Ihrem Texteditor ist es wahrscheinlich auch eingebaut).
Die meisten Dateisysteme können dies nicht transparent ausführen.
Time Machine und System Restore auf Mac bzw. Windows sind nur Sicherungs- / Änderungskontrollsysteme.
Es gibt kein Rückgängigmachen in der Befehlszeile. Sie können Befehle jedoch als rm -i
und ausführen mv -i
. Dies wird Sie mit einem "Sind Sie sicher?" Frage, bevor sie den Befehl ausführen.
Es ist auch möglich, einem Startskript einen Alias dafür hinzuzufügen (z. B. ~/.bashrc
oder /etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
Bearbeiten: Aufgrund der folgenden Vorschläge habe ich meinen Rat entfernt, die Standardbefehle als Alias zu verwenden. Stattdessen werden jetzt neue Befehle eingeführt.
mv -i
Fordert nur zum Überschreiben einer Datei auf (was sie nützlich und nicht unangenehm macht). In diesem Sinne alias cp='cp -i'
.
Der Grund dafür, dass Linux / Unix-Systeme nicht wiederhergestellt werden können, liegt in der Art und Weise, wie die meisten Dateisysteme ihre Informationen speichern. Alle Datei-Metainformationen werden auf der Vorderseite der Festplatte mit Verweisen auf Inodes auf dem Rest der Festplatte gespeichert. In der Regel weisen die meisten Dateisysteme einer Datei in diesem Metabereich 10 Blöcke zu. Die ersten 7 beziehen sich auf die ersten 7 Inodes. Die 8. und 9. gehen zu Listen von Inodes (doppelt verknüpften Blöcken) und die 10. gehen zu Listen von Listen (dreifach verknüpften Blöcken). Dies variiert von Dateisystem zu Dateisystem (ext4, jfs, xfs usw.), aber diese Listen von Blöcken können normalerweise Dateigrößen von 2 GB bis zu mehreren TB adressieren.
Da all diese Informationen beim Löschen einer Datei auf der Vorderseite der Festplatte gespeichert werden, können Inodes auf der Festplatte nicht auf die Metadaten verweisen, zu denen sie gehören. Im Gegensatz dazu speichern FAT32 und NTFS tatsächlich einige Header-Informationen mit den Dateien selbst, wodurch leichter identifiziert werden kann, zu welcher Datei eine Gruppe von Blöcken gehört (solange dieser Speicherplatz noch nicht von neueren Dateien freigegeben wurde). In der Linux-Arbeit ist es fast immer das erste, was sofort mit neuen Daten überschrieben wird, wenn Sie etwas löschen.
Wenn Sie wirklich eine Funktion zum Rückgängigmachen möchten, verwenden Sie die Versionsverwaltung. Subversion funktioniert tatsächlich sehr gut auf einem Einzelplatzrechner. Ich verwende es, um alle meine persönlichen Dateien auf meinem Heimsystem zu kontrollieren. Es scheint übertrieben, bis eine Katastrophe, ein Schurken-Skript oder ein Tippfehler in der Befehlszeile eintreffen.
rm -r .
. ;)
rm -r project.git
. Glücklicherweise, wenn Sie eine andere Version auf einem Remote-Server haben, ist es unwahrscheinlich, dass dies passiert
rm -r .
. Wirklich dumm von mir.
Eine Sache, die ich gerne zu meinem .bashrc hinzufüge, ist eine Funktion zum Kopieren und Entfernen. So etwas wie:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
Aber Sie müssen sich angewöhnen, cprm nicht rm zu tippen.
Offensichtlich müssen Sie den gelöschten Bereich im Auge behalten, wenn Sie nur über begrenzten Speicherplatz verfügen.
"$1"
.
GitFS ist ein Fuse-basiertes Dateisystem, das automatisch diff
s zwischen den Versionen berechnet und das Wiederherstellen / Durchsuchen dieser ermöglicht.
Webseite: https://www.presslabs.com/gitfs
Dokumente: https://www.presslabs.com/gitfs/docs/usage/