Sie können eine Datei (Verzeichnis oder was auch immer) umbenennen, indem Sie nur den Inode kennen find
, aber wenn (a) das Dateisystem, das sie enthält, nicht gemountet ist oder wenn (b) ein anderes Dateisystem über einem nicht leeren Verzeichnis gemountet ist, das das enthält Datei, an der Sie interessiert sind, auf die Datei kann Ihr System einfach nicht zugreifen. In Fall (a) müssen Sie das Dateisystem bereitstellen, bevor Sie etwas an den Inhalten vornehmen können, einschließlich des Umbenennens. In Fall (b) müssen Sie das Dateisystem aushängen, das "über" dem Verzeichnis bereitgestellt wird, das das enthält Datei, die Sie umbenennen möchten. Es sieht so aus, als würden Sie nach Fall (b) fragen.
Wenn ich Sie richtig verstehe, versuchen Sie, Ihr altes /home
Verzeichnis (das sich auf Ihrer Root-Partition befindet) zugänglich zu machen, während Sie weiterhin Ihre neue Partition verwenden, die unter gemountet ist /home
. Wenn Sie dies möchten, gehen Sie wie folgt vor:
Schließen Sie alle Dateien und melden Sie sich ab. Melden Sie sich dann an als root
(verwenden Sie dazu ein virtuelles Terminal - drücken Sie Strg-Alt-F2) Führen Sie Folgendes aus:
umount /home
mv /home /home-old
mkdir /home
mount -a
ls /home
ls /home-old
Wenn alles in Ordnung ist, melden Sie sich als Sie selbst ab und wieder an, und alles sollte in Ordnung sein.
Im Übrigen lautet der Befehl zum Umbenennen einer Datei nur unter Kenntnis ihres Inodes (vorausgesetzt, die Datei befindet sich im aktuellen Verzeichnis):
find . -maxdepth 1 -inum 123456789 -exec mv {} mynewname \;
Wo 123456789
ist natürlich die Inode-Nummer? (Beachten Sie, dass Sie find
die Dateinamen und den Pfad bestimmt und leitet diese Informationen an mv
, es gibt keine Möglichkeit , überhaupt eine Datei umbenennen , ohne Einbeziehung der vorhandenen Dateinamen in irgendeiner Weise, aber wenn es nur ist , dass Sie nicht wissen , die Dateinamen, es ist ganz einfach.)
mv
akzeptiert Inodes in keiner Weise.In einem typischen Unix-Dateisystem ist es im Allgemeinen strukturell unmöglich, eine Datei basierend auf dem Inode zu verschieben. Der Grund dafür ist, dass beim Umbenennen einer Datei der Verzeichniseintrag aus dem Verzeichnis entfernt wird, in dem sie enthalten ist, und an anderer Stelle ein Verzeichnis erstellt wird. Der Inode enthält jedoch keinen Zeiger auf den Verzeichniseintrag, sondern nur (Zeiger auf) die Dateimetadaten (Zeitstempel, Berechtigungen usw.) und den Dateiinhalt.
Welche davon würden Sie für eine Datei mit mehreren Hardlinks umbenennen? Der Inode reicht nicht aus.
Für ein Verzeichnis wäre es auf einigen Dateisystemen möglich, nur mit dem Inode zu handeln:
..
. Dies zeigt auf das übergeordnete Verzeichnis.Dies macht jedoch mehrere Annahmen:
..
? Dies hängt vom Dateisystemtyp ab. Einige Dateisysteme haben einen expliziten Eintrag für..
; Für andere werden diese Einträge vom Dateisystemtreiber gefälscht. Wenn..
es keinen gibt, ist dieser Ansatz grundsätzlich unmöglich...
Links enthält, gibt es einen weiteren Stolperstein, der möglicherweise nicht offensichtlich ist: Schritt 1 ist möglicherweise im Kernel möglich, aber es gibt keine Schnittstelle dafür. Viele Unix-Varianten haben keine Schnittstelle, über die eine Datei über ihren Inode geöffnet werden kann, da dies die Berechtigungen umgehen würde. Beispielsweise ist eine Datei mit Berechtigungenrwxr-xr-x
(dh weltweit lesbar), die sich in einem Verzeichnis mit Berechtigungen befindetrwx------
(dh nur für den Eigentümer zugänglich ist), nur für den Verzeichnisbesitzer zugänglich. Dies kann nicht allein anhand des Inodes festgestellt werden - die Datei könnte tatsächlich über einen anderen festen Link zugänglich sein!Das Ergebnis ist, dass es nicht möglich ist, irgendetwas zu tun, einschließlich des Umbenennens, wenn eine Datei nur ihren Inode hat. Sie benötigen einen Pfad zur Datei.
Die einzige praktische Möglichkeit, auf eine Datei mit ihrem Inode zu reagieren, besteht darin, zuerst einen Pfad zu finden, z. B. mit
find -inum
, und dann den Pfad zum Handeln zu verwenden. Das hilft in Ihrer Situation nicht, in der die Datei von einem Einhängepunkt beschattet wird. Es gibt keine tragbare Möglichkeit, auf Dateien zuzugreifen, die von einem Einhängepunkt beschattet werden. Wie Sie festgestellt haben, können Sie unter Linux einen Bind-Mount verwenden.quelle
Vielen Dank. Dies war sehr hilfreich. Es ermöglicht mir, umständliche Namen für die Abschrift von Videodateien, die ich von YouTube heruntergeladen habe, in prägnantere, aber dennoch aussagekräftige Dateinamen zu ändern. Beispielsweise:
... gibt mir die Dateien:
Ich halte dies für ein Manko des ansonsten sehr nützlichen Erhaltens.
Ich kann den zweiten Dateinamen wie folgt ändern:
... das gibt mir gleich zu Beginn die Dateiliste mit der Inode-Nummer:
... dann renne ich:
Mein mvi bash Shell-Skript lautet:
quelle
mvi
Skript nicht zitierte Variablen, was bedeutet, dass es fehlschlägt, wenn eines der dem Skript angegebenen Argumente Leerzeichen enthält (oder möglicherweise auch, wenn sie Globbing-Zeichen enthalten).