Ein Verzeichnis ist (konzeptionell) eine spezielle "Datei", die eine Liste von Namen und die Inode-Nummern enthält, auf die diese Namen verweisen. Einige Namen können Unterverzeichnisse sein. Es gibt einen speziellen Eintrag, ..
der auf das übergeordnete Verzeichnis verweist.
Das Ändern des Dateinamens ist also ganz einfach: Sie ändern nur den Namen im Verzeichniseintrag, sonst nichts. Dies gilt unabhängig davon, ob die Datei tatsächlich eine Datei ist oder eine "Datei", in der der Inhalt eines anderen Verzeichnisses gespeichert wird. In der Tat macht der gleiche rename
Systemaufruf beides.
Das Kopieren ist jedoch weitaus weniger trivial. Sie konnte nur das Verzeichnis „Datei“, kopieren , aber dann würden Sie zwei Verzeichnisse haben , wo sind die Dateien identisch sind (sie harte Links sein würde). Wenn Sie ein System hätten, das Hardlinks zu Verzeichnissen zulässt, dann wäre dies das, aber da kein modernes System dies zumindest für Nicht-Root-Benutzer zulässt, müssen Sie diese Kopie für jedes Unterverzeichnis erstellen. Sie können tatsächlich cp
nach diesem Verhalten fragen mit cp -lR
: -l
für einen festen Link, -R
für diese Rekursion.
Aber alles miteinander verbunden zu lassen, ist wahrscheinlich nicht das, was Sie wollen. Stattdessen möchten Sie cp
jede Datei kopieren. Das ist ein ziemlich teurer Vorgang: Jede Datei muss in den Speicher eingelesen und an einer zweiten Stelle wieder auf die Festplatte geschrieben werden. Tatsächlich sind mehrere Systemaufrufe erforderlich, um die Dateien zu öffnen, zu lesen, zu schreiben und zu schließen. Dies muss für jede Datei wiederholt werden.
Herkömmliche Dateisysteme funktionieren auch auf der Festplatte auf diese Weise. Es gibt keine andere Möglichkeit, eine Reihe von Dateien zu kopieren, als jede Datei einzeln durchzugehen und zu kopieren. Dies sind die Dateisystemtypen, die bei der Entwicklung der grundlegenden Befehlszeilendienstprogramme verwendet wurden.
mv
ing den gleichen „nur den Name im Verzeichniseintrag ändern“ von einem Dateisystem auf einen anderen?