Ich habe hier eine kleine Frage.
Wenn ich zwei Dateien habe, sagen Sie filea
und fileb
, mv filea fileb
würde
- löschen
fileb
- umbenennen
filea
infileb
Dann , wenn ich zwei Verzeichnisse haben, sagen dira
und dirb
, mv dira dirb
würde
- bewege dich
dira
indirb
(es wirddirb/dira
)
Wenn ich feststelle, dass es in beiden Fällen keine Benachrichtigung oder Nachricht gibt, ist dies für mich ziemlich inkonsistent. Ich denke, mv dira dirb
sollte einfach dirb
mit dem Inhalt von überschreiben dira
(oder die beiden Verzeichnisse unter einem Verzeichnis namens zusammenführen dirb
).
Ich erinnere mich, dass ich irgendwo gelesen habe, dass ein Verzeichnisname mit einem Schrägstrich (wie dira/
) wie ein Verzeichnis behandelt wird und ein Name ohne Schrägstrich (wie dira
) wie eine Datei behandelt wird (natürlich in gewissem Umfang). Wie auch immer, jetzt möchte ich die Shell (zsh und möglicherweise bash) dazu bringen, meine Notation eines Verzeichnisses mit einem Schrägstrich zu respektieren. Gibt es eine Terminaloption, mit der ich das durchsetzen kann?
Zur Verdeutlichung hier mein gewünschtes Verhalten:
mv dira dirb
führt dazu,dirb
dass der Inhalt von überschrieben wirddira
mv dira dirb/
führt dazu,dira
dass indirb
(indirb/dira
) verschoben wird
Hat jemand so gedacht wie ich? Oder bin ich nur komisch?
Antworten:
Ja, dies ist selbst innerhalb der GNU-Tools etwas inkonsistent.
Ein Problem mit Ihrem Vorschlag ist, dass nicht leere Verzeichnisse nicht entfernt werden können. Abgesehen davon
-T
nähert sich (jedenfalls im GNU-Land) ungefähr dem an, was Sie wollen (der erste Fall):quelle
alias ren=mv -T
.Wenn Sie nur alles von Dira nach Dirb verschieben möchten, können Sie ausführen
mv dira/* dirb
.Laut MV-Manpage auf meinem HP-UX.
The mv command moves:
+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).
quelle
shopt -s dotglob
durch Bash behoben.