Gibt es beim Verschieben eines Verzeichnisses in ein anderes Verzeichnis eine einfache Möglichkeit, einen Fehler zu generieren, wenn das Zielverzeichnis nicht existiert?

Gibt es beim Verschieben eines Verzeichnisses in ein anderes Verzeichnis eine einfache Möglichkeit, einen Fehler zu generieren, wenn das Zielverzeichnis nicht existiert?

Ich hatte die Angewohnheit, zu glauben mv directory1 directory2/, dass bei einem Tippfehler beim Namen ein directory2Fehler auftritt und ich gewarnt werde, dass das Verzeichnis nicht existiert. Wie sich herausstellt, ist das nicht der Fall.

Gibt es eine einfache Möglichkeit, dies zu erreichen? (Ein Fehler, wenn das Zielverzeichnis nicht existiert).

Antwort1

mv -t directory2/ directory1

Ausman 1 mv:

mv [OPTION]... -t DIRECTORY SOURCE...

-t, --target-directory=DIRECTORY
verschieben Sie alle SOURCEArgumente inDIRECTORY

Diese Option wird von POSIX jedoch nicht benötigt. Sie mvkann sie unterstützen, muss es aber nicht.


Beispiel:

$ ls
$ # Nothing here so far
$ mkdir foo bar
$ # Let's move foo to bar/
$ mv -t baz/ foo   # Oops, a typo, with -t
mv: failed to access 'baz/': No such file or directory
$ mv foo baz/      # Oops, a typo, without -t
$ ls                        
bar  baz
$ 

Antwort2

Wenn Sie verwenden bashund Ihr mvBefehl die Nicht-POSIX-Option nicht unterstützt , können Sie in Ihrer Datei -ttrotzdem eine Funktion wie folgt definieren:mvdir.bashrc

mvdir() {
    if [ -d "$2" ]
    then
        mv "$1" "$2"
    else
        printf 'mvdir: "%s" does not exist, or is not a directory\n' "$2" >&2
        return 1
    fi
}

Mit dieser Funktionsdefinition können Sie dann sagen:

mvdir directory1 directory2

In einer kompakteren Form lautet der Befehl, der den Kern dieser Funktion bildet:

( [ -d directory2 ] && mv directory1 directory2 )

Diese Logik wird in der Funktion leicht erweitert, um eine übersichtlichere Ausgabe einer Fehlermeldung zu ermöglichen, wenn directory2 nicht existiert oder kein Verzeichnis ist. Wenn das Zielverzeichnis existiert, mvwird ausgeführt und alle Fehlermeldungen oder Ergebniscodes werden von ausgegeben mv. Wenn das Verzeichnis nicht existiert, printfwird eine Diagnose an geschrieben stderrund die Funktion gibt einen Ergebniscode ungleich Null zurück, um einen Fehler anzuzeigen.

Zum Testen starten Sie in einem leeren Verzeichnis:

$ find *
find: *: No such file or directory
$ mkdir A
$ find *
A
$ mvdir A B || echo fail
mvdir: "B" does not exist, or is not a directory
fail
$ mkdir B
$ find *
A
B
$ mvdir A B || echo fail
$ find *
B
B/A

verwandte Informationen