Transformiere ein Verzeichnis in eine Datei oder eine Datei in ein Verzeichnis

15

Ich wollte eine Datei mit dem Namen erstellen test. Versehentlich renne ich mkdir teststatt touch test.

Ist es möglich, ein testVerzeichnis in eine Datei mit dem Namen zu konvertieren test?

Was ist mit der Konvertierung einer Datei mit dem Namen testin ein Verzeichnis mit dem gleichen Namen?

Ionică Bizău
quelle
5
rm -f test && touch testaußer das weiß ich wirklich nicht
Kiwy
@ Kiwy Ja, aber ich stelle mir einen eingebauten Befehl vor, der für diese Aufgabe entwickelt wurde.
Ionică Bizău

Antworten:

12

Dies ist für kein Unix oder Linux möglich, das ich jemals angerührt habe.

Unter einigen älteren Unixen sind Verzeichnisse Dateien, die speziell markiert sind, aber immer noch Dateien. Früher konnten Sie beispielsweise ein Verzeichnis catunter SunOS lesen . Viele moderne Dateisysteme verfügen möglicherweise über Verzeichnisse als B + -Bäume oder eine andere Datenstruktur auf der Festplatte. Das Verwandeln einer Datei in ein Verzeichnis oder umgekehrt erfordert also immer ein Löschen und eine Neuerstellung mit demselben Namen.

Bruce Ediger
quelle
1
Interessant. Wenn niemand eine Lösung findet, werde ich diese Antwort markieren. :-)
Ionică Bizău
5

Nein, es gibt keinen solchen Befehl, weil er absolut sinnlos wäre. Ihre Frage ist wie die Frage nach einer Möglichkeit, eine Box in ein flaches Rechteck umzuwandeln. Was würdest du mit den Dingen in der Box (Verzeichnis) machen? Wie würde das Rechteck der Box entsprechen, aus der es kam?

Dateien und Verzeichnisse haben völlig unterschiedliche Funktionen. Während ein Verzeichnis in der Tat eine Datei in * nix-Systemen ist, gilt dies nur für die Interna des Systems und nicht für das, was Sie als Benutzer sehen. Wenn Sie eine Datei in ein Verzeichnis konvertieren oder umgekehrt, müssen Sie die Datei immer löschen und das Verzeichnis erstellen. Das Beste, worauf Sie hoffen können, ist, dieselbe Inode zu verwenden, aber auch diesbezüglich nicht viel.

terdon
quelle
Zu sagen, dass es keinen Sinn gibt, ist Ihre Meinung, keine texchnische Tatsache.
Sridhar Sarnobat
@ user7000 Was würden Sie mit dem Inhalt eines Verzeichnisses tun, wenn Sie in eine Datei "konvertieren"?
Terdon
Ein Dateisystem speichert Daten in einer Baumstruktur. In der Informatik können Baumknoten, die Blattknoten sind, zu internen Knoten werden, wenn Sie ihnen untergeordnete Knoten hinzufügen. Und nein, ich werde keine Datenbank verwenden, wenn ein Dateisystem ausreicht.
Sridhar Sarnobat
2

Erstellen Sie eine Funktion, um das zu tun, was Sie wollen. ( bashoder andere Bourne / POSIX-ähnliche Shell vorausgesetzt)

$ dir2file() { rmdir -- "$1" && touch -- "$1";}
$ mkdir adir
$ dir2file adir
$ ls -l adir
-rw-r--r-- 1 xtian xtian 0 2014-03-04 14:59 adir
$ 

Ich benutze absichtlich rmdirwas scheitern wird wenn adirkein Verzeichnis oder nicht leer ist (nein -ferzwingen). touchläuft nur wennrmdir erfolgreich ist.

Sie können die Funktionsdefinition in Ihre Shell-Anpassungsdatei ( .bashrcfür bash) einfügen .

X Tian
quelle
@Stephane Chazelas Was macht der --?
X Tian
2
das --markiert das Ende der Flags so rmdirund touchweiß, dass alles, was darüber hinausgeht, ein Dateiname ist, auch wenn es mit beginnt -.
Kevin
2

Wenn Sie sich fragen, warum Sie dies tun möchten, folgen Sie diesem Thread:

https://community.linksys.com/t5/Wireless-Routers/Media-files-changing-to-folder-types/td-p/504192/highlight/true

Anscheinend hat ein Fehler in der Firmware das Bit im Verzeichniseintrag für die Datei umgedreht, sodass das Betriebssystem glaubte, es handele sich um einen Ordner anstelle einer Datei.

Ich habe zwar nicht den Linksys-Router in Frage, aber etwas hat alle meine JPG-Dateien in leere Ordner geändert. Wenn es eine Möglichkeit gibt, das Bit (oder was auch immer) zu spiegeln, das besagt, dass ein NTFS-Verzeichniseintrag ein Ordner gegen eine Datei ist, würde ich gerne davon erfahren.

Eine der Lösungen in diesem 2 Jahre langen Thread besagte, dass, wenn die Festplatte mit den Ordnern, die als Dateien verwendet wurden, mit einem Mac unter OS / X verbunden ist, der Mac sie wieder als Dateien sieht und sie kann in einen Ordner auf dem Mac kopiert werden. Ich habe keinen Mac, um das auszuprobieren. Wenn also jemand einen Weg kennt, das Bit umzudrehen ...

Peter Dow
quelle
1

Holen Sie sich zunächst Zugriff auf das Terminal und führen Sie es ls -al filemit der Datei ausGreifen Sie zunächst Sie die , die Sie zurück in einen ACTUAL-Ordner konvertieren möchten. Wenn Dateien und Unterverzeichnisse aufgelistet sind, bedeutet dies, dass Ihre "Datei" zuvor ein Ordner mit echtem Inhalt war, und Sie können fortfahren:

Ausführen:

sudo chmod 700 /

ODER

sudo chmod 700 file

Starten Sie das System neu, und stellen Sie den Terminalzugriff wieder her. Führen Sie Folgendes aus:

sudo chmod 744 /

ODER

sudo chmod 744 file

HINWEIS: "Datei" sollte durch eine Datei ersetzt werden, die Sie wieder in einen IST-Ordner konvertieren möchten.

Dies ist nur eine willkürliche Methode, um dieses Problem zu lösen. Es entstehen jedoch Berechtigungsanomalien, die Sie entweder fsck -fbeheben (wenn Sie nicht angemeldet sind) oder bei Bedarf manuell festlegen können.

WIEDER ist dies nur eine bewährte Methode, um zu vermeiden, dass die Datei gelöscht werden muss, die zuvor ein nicht leerer Ordner war.

Alex S.
quelle
Interessanter Ansatz ...
eyoung100