In welchem Fall ist das Ergebnis inkonsistent? Es sieht so aus, als würde das Zielverzeichnis, sobald es existiert, in das Zielverzeichnis verschoben, andernfalls wird es umbenannt.
Jmathew
Das ist widersprüchlich. Der gleiche Befehl sollte dasselbe tun. Das heißt, der Befehl ist nicht eindeutig.
user4951
Das ist nicht wirklich inkonsistent, weil es im Kontext konsistent agiert. Ich kann zwar sehen, wie verwirrend es ist, aber je mehr ich darüber nachdenke, desto besser muss der Befehl sein, um in allen Szenarien zu funktionieren.
Jmathew
Ich würde eher sagen , das ist , wie es konzipiert ist und es ist auch logical..if Sie verwenden mvmit Dateien , die es nicht die gleiche thing.just renaming.but mit mvmit Verzeichnissen ist es nicht gut das gesamte Verzeichnis mit Unterverzeichnis zu löschen , weil einen mvBefehl, der nicht ist sicher. so wird es verschoben als test1/test2. aber wenn du es trotzdem erreichen willst, schreibe ein, aliaswelches prüfe, ob der angegebene Parameter directory ist und benutze dann rm -rf das Verzeichnis und benutze den mvBefehl, aber benutze es auf dein eigenes Risiko.
harish.venkat
Ich vermute, Ihr Beispiel basiert auf der falschen Erinnerung an etwas, das in der Vergangenheit passiert ist, basierend auf "Es scheint, dass ich so etwas tue". Wenn beides /hellound /hello2Verzeichnisse sind, ist mir aufgefallen, dass dieses Verzeichnis cp /hello /hello2inkonsistent ist. Je nachdem , welche Kombination von Hinterschrägstriche gibt es manchmal der Inhalt /hellokopiert werden in /hello2, und manchmal das Verzeichnis selbst wird kopiert in.
Izkata
Antworten:
16
mv a bVersuche , sich zu bewegen ain , bwenn bein Verzeichnis oder ein symbolischer Link auf ein Verzeichnis ist. Ansonsten wird es (oder kopieren und löschen , wenn auf verschiedenen Dateisystemen) umbenennen azu b.
Um ein konsistentes Ergebnis zum Verschieben einer Datei in ein Verzeichnis zu erhalten, können Sie Folgendes tun:
mv file dir/
oder
mv file dir/.
Wenn dirnicht vorhanden ist , erhalten Sie eine Fehlermeldung erhalten, und es wird nicht umbenannt filezu dir.
Wenn Sie dagegen a ausführen möchten, renameohne sich Sorgen machen zu müssen, ob die Zieldatei als Verzeichnis existiert oder nicht, können Sie mit GNU mv Folgendes ausführen:
mv -T file dest
In diesem Fall filewird nicht verschoben, destwenn destes sich um ein Verzeichnis handelt. Wenn jedoch beide fileund destVerzeichnisse sind und destleer sind, filewird in umbenannt dest(und das Original wird destentfernt). Wenn beide Verzeichnisse sind und destnicht leer sind, mv -Twerde ich mich beschweren.
Gleiche, wenn fileund destsind nicht Verzeichnisse (und das schließt Symlinks einschließlich symbolische Links zu Verzeichnissen), filewird umbenannt werden dest(obwohl Sie eine Aufforderung erhalten, wenn Sie keine Schreibberechtigung haben dest), und das Original destentfernt wird. Es gibt einen Unterschied zu mv file destdem Fall, in dem destein Symlink zu einem Verzeichnis vorhanden ist. Mit -T, fileumbenannt wird dest, aber ohne -T, filein das durch wies Verzeichnis verschoben dest.
Zusammenfassend kann gesagt werden, dass nach dem Umbenennen mv -T file destentweder eine Fehlermeldung (oder eine Eingabeaufforderung) angezeigt wird. Wenn der Befehl erfolgreich ausgeführt wurde, wurde das Original , sofern es zuvor vorhanden war, entfernt.filedestdest
Dies hängt ganz davon ab, ob es bereits ein Verzeichnis mit dem Namen '/ hello2' gibt oder nicht.
Wenn / hello2 existiert UND ein Verzeichnis ist, verschiebt move / hello immer nach / hello / hello2
Wenn / hello2 nicht existiert, wird move / hello immer in / hello2 umbenennen
Wenn / hello2 existiert UND eine Datei ist, erhalten Sie die Fehlermeldung "Nicht-Verzeichnis 'hello2' kann nicht mit Verzeichnis 'hello' überschrieben werden.
mv
mit Dateien , die es nicht die gleiche thing.just renaming.but mitmv
mit Verzeichnissen ist es nicht gut das gesamte Verzeichnis mit Unterverzeichnis zu löschen , weil einenmv
Befehl, der nicht ist sicher. so wird es verschoben alstest1/test2
. aber wenn du es trotzdem erreichen willst, schreibe ein,alias
welches prüfe, ob der angegebene Parameter directory ist und benutze dann rm -rf das Verzeichnis und benutze denmv
Befehl, aber benutze es auf dein eigenes Risiko./hello
und/hello2
Verzeichnisse sind, ist mir aufgefallen, dass dieses Verzeichniscp /hello /hello2
inkonsistent ist. Je nachdem , welche Kombination von Hinterschrägstriche gibt es manchmal der Inhalt/hello
kopiert werden in/hello2
, und manchmal das Verzeichnis selbst wird kopiert in.Antworten:
mv a b
Versuche , sich zu bewegena
in ,b
wennb
ein Verzeichnis oder ein symbolischer Link auf ein Verzeichnis ist. Ansonsten wird es (oder kopieren und löschen , wenn auf verschiedenen Dateisystemen) umbenennena
zub
.Um ein konsistentes Ergebnis zum Verschieben einer Datei in ein Verzeichnis zu erhalten, können Sie Folgendes tun:
oder
Wenn
dir
nicht vorhanden ist , erhalten Sie eine Fehlermeldung erhalten, und es wird nicht umbenanntfile
zudir
.Wenn Sie dagegen a ausführen möchten,
rename
ohne sich Sorgen machen zu müssen, ob die Zieldatei als Verzeichnis existiert oder nicht, können Sie mit GNU mv Folgendes ausführen:In diesem Fall
file
wird nicht verschoben,dest
wenndest
es sich um ein Verzeichnis handelt. Wenn jedoch beidefile
unddest
Verzeichnisse sind unddest
leer sind,file
wird in umbenanntdest
(und das Original wirddest
entfernt). Wenn beide Verzeichnisse sind unddest
nicht leer sind,mv -T
werde ich mich beschweren.Gleiche, wenn
file
unddest
sind nicht Verzeichnisse (und das schließt Symlinks einschließlich symbolische Links zu Verzeichnissen),file
wird umbenannt werdendest
(obwohl Sie eine Aufforderung erhalten, wenn Sie keine Schreibberechtigung habendest
), und das Originaldest
entfernt wird. Es gibt einen Unterschied zumv file dest
dem Fall, in demdest
ein Symlink zu einem Verzeichnis vorhanden ist. Mit-T
,file
umbenannt wirddest
, aber ohne-T
,file
in das durch wies Verzeichnis verschobendest
.Zusammenfassend kann gesagt werden, dass nach dem Umbenennen
mv -T file dest
entweder eine Fehlermeldung (oder eine Eingabeaufforderung) angezeigt wird. Wenn der Befehl erfolgreich ausgeführt wurde, wurde das Original , sofern es zuvor vorhanden war, entfernt.file
dest
dest
quelle
Dies hängt ganz davon ab, ob es bereits ein Verzeichnis mit dem Namen '/ hello2' gibt oder nicht.
Wenn / hello2 existiert UND ein Verzeichnis ist, verschiebt move / hello immer nach / hello / hello2
Wenn / hello2 nicht existiert, wird move / hello immer in / hello2 umbenennen
Wenn / hello2 existiert UND eine Datei ist, erhalten Sie die Fehlermeldung "Nicht-Verzeichnis 'hello2' kann nicht mit Verzeichnis 'hello' überschrieben werden.
quelle
Ich habe es versucht
hoffe das erklärt alles.
-v
ist ausführlicher Modus.quelle