Verschieben Sie kein Verzeichnis / eine Datei, wenn sich src und dest auf verschiedenen Partitionen befinden

437
quack quixote

Um mich zu schützen, wenn ich bei der Eingabe eines Verzeichnis- / Dateinamensfehlers einen Fehler gemacht habe, suche ich nach einem Weg, um zu verhindern, dass mv irgendetwas unternimmt, wenn die Quell- und Zieldateien auf separaten Partitionen vorhanden sind.

Ich sehe keine Optionen auf der Manpage. Google schien nicht zu helfen. Vielleicht so etwas

sourceDrive=something sourceFile destinationDrive=something destinationFile  if [ $sourceDrive == $destinationDrive ] mv sourceFile destinationFile fi 

Ich muss nur einen Weg finden, um die Partition zu ermitteln, auf der sich das Verzeichnis / die Datei befindet

2

1 Antwort auf die Frage

1
dmckee

Sie suchen fast sicher ein Skript, um dies zu tun.

Bei Dateien können Sie sie fest verknüpfen. Wenn dies erfolgreich war, heben Sie die Verknüpfung mit dem Original auf. Dies funktioniert nicht für Verzeichnisse (da die meisten Dateisysteme Hardlinking-Verzeichnisse untersagen).

Minimal getestetes, triviales Skript, das dies tun könnte:

#/bin/sh if ln "$1" "$2" ; then unlink "$1" fi 

Die Alternative besteht darin, das mit jedem Pfad verknüpfte Dateisystem zu überprüfen.

Hier fange ich vielleicht mit etwas an

#! /bin/sh STAT=/usr/bin/stat v1=$( $STAT -f "%d" "$1" ) v2=$( $STAT -f "%d" "$2" ) if [[ $v1 == $v2 ]] then mv "$1" "$2" fi 

WARNUNG! Dies hat einen Fehler, wenn Sie das oberste Verzeichnis eines Dateisystems als Ziel angeben. Das Beheben des Fehlers ist subtil, kann jedoch so aussehen: Überprüfen Sie, ob das Ziel bereits existiert. Wenn nicht touches. Dann geben Sie das Ziel an. Wenn die Kopie fehlschlägt und Sie das Ziel erstellen müssen, um es zu testen, entfernen Sie das Ziel.

Die zweite Option sieht so aus, als sollte es den Trick tun. Verwenden Sie mindestens für die Statistikversion 7.4 das Flag "-c" für das "% d" -Format. Vielen Dank für Ihre Hilfe. vor 14 Jahren 0