Transformez un répertoire en fichier ou un fichier en répertoire

15

Je voulais créer un fichier nommé test. Par accident, je cours mkdir testau lieu de touch test.

Est-il possible de convertir un testrépertoire dans un fichier nommé test?

Qu'en est-il de la conversion d'un fichier nommé testdans un répertoire du même nom?

Ionică Bizău
la source
5
rm -f test && touch testsauf cela, je ne sais vraiment pas
Kiwy
@Kiwy Oui, mais j'imagine une commande intégrée conçue pour effectuer cette tâche.
Ionică Bizău

Réponses:

12

Ce n'est possible pour aucun Unix ou Linux que j'aie jamais touché.

Sous certains Unix plus anciens, les répertoires sont des fichiers, spécialement marqués, mais toujours des fichiers. Vous pouviez lire un répertoire avec catsous SunOS, par exemple. De nombreux systèmes de fichiers modernes peuvent avoir des répertoires sous forme d'arbres B + ou une autre structure de données sur disque. Donc, transformer un fichier en répertoire ou vice versa nécessiterait toujours une suppression et une recréation avec le même nom.

Bruce Ediger
la source
1
Intéressant. Si personne ne vient avec une solution, je marquerai cette réponse. :-)
Ionică Bizău
5

Non, il n'y a pas de commande de ce genre car cela n'aurait absolument aucun sens. Votre question revient à demander un moyen de transformer une boîte en un rectangle plat. Que feriez-vous avec les choses dans la boîte (répertoire)? Comment le rectangle correspondrait-il à la boîte dont il est issu?

Les fichiers et les répertoires remplissent des fonctions complètement différentes. Alors qu'un répertoire est en effet un fichier dans les systèmes * nix, cela ne s'applique qu'aux éléments internes du système et non à ce que vous, l'utilisateur, voyez. Ainsi, la conversion d'un fichier dans un répertoire, ou vice versa, impliquera toujours la suppression du fichier et la création du répertoire. Le mieux que vous puissiez espérer serait d'utiliser le même inode, mais encore une fois, cela ne sert à rien.

terdon
la source
Dire que cela ne sert à rien est votre opinion, pas un fait technique.
Sridhar Sarnobat
@ user7000 que feriez-vous avec le contenu d'un répertoire lorsque vous "convertissez" un fichier?
terdon
Un système de fichiers stocke les données dans une arborescence. En informatique, les nœuds d'arbre qui sont des nœuds feuilles peuvent devenir des nœuds internes lorsque vous leur ajoutez des enfants. Et non, je ne vais pas utiliser de base de données lorsqu'un système de fichiers suffit.
Sridhar Sarnobat
2

Créez une fonction pour faire ce que vous voulez. ( bashou autre shell Bourne / POSIX comme supposé)

$ 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
$ 

J'utilise délibérément rmdirce qui échouera s'il adirn'est pas un répertoire ou non vide (non -fà forcer). touchne fonctionnera qu'en cas de rmdirsuccès.

Vous pouvez mettre la définition de la fonction dans votre fichier de personnalisation du shell ( .bashrcpour bash).

X Tian
la source
@Stephane Chazelas Que fait le --?
X Tian
2
le --marque la fin des drapeaux ainsi rmdiret touchsachez que tout ce qui est passé est un nom de fichier, même s'il commence par -.
Kevin
2

Pour ceux qui se demandent pourquoi vous souhaitez faire cela, suivez ce fil:

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

Apparemment, un bogue dans le micrologiciel a renversé le bit dans l'entrée de répertoire du fichier, faisant croire au système d'exploitation qu'il s'agit d'un dossier plutôt que d'un fichier.

Bien que je n'ai pas le routeur Linksys en question, quelque chose a changé tous mes fichiers .jpg en dossiers vides. S'il existe un moyen de retourner le bit (ou autre) qui dit qu'une entrée de répertoire NTFS est un dossier par rapport à un fichier, j'aimerais le savoir.

L'une des solutions de ce fil de discussion de 2 ans a indiqué que si le disque dur contenant les dossiers qui étaient utilisés pour être des fichiers est connecté à un Mac exécutant OS / X, le Mac les verra à nouveau comme des fichiers et ils peut être copié dans un dossier sur le Mac. Je n'ai pas de Mac pour l'essayer, donc si quelqu'un sait comment renverser la vapeur ...

Peter Dow
la source
1

Tout d'abord, accédez au terminal et exécutez ls -al fileavec le fichier étant le fichier que vous souhaitez reconvertir dans un dossier ACTUAL. Si des fichiers et des sous-répertoires sont répertoriés, cela signifie que votre "fichier" était auparavant un dossier avec un contenu réel et vous pouvez continuer:

Exécuter:

sudo chmod 700 /

OU

sudo chmod 700 file

Redémarrez le système et récupérez l'accès au terminal et exécutez:

sudo chmod 744 /

OU

sudo chmod 744 file

N'OUBLIEZ PAS: "fichier" doit être remplacé par le fichier que vous souhaitez reconvertir dans un dossier RÉEL.

C'est juste une façon arbitraire de résoudre ce problème, mais cela crée des anomalies d'autorisation que vous pouvez soit utiliser fsck -fpour corriger (bien que non monté bien sûr) ou définir manuellement de nouvelles autorisations selon les besoins.

ENCORE, c'est juste un moyen éprouvé pour éviter d'avoir à supprimer le fichier qui était auparavant un dossier non vide.

Alex S.
la source
Approche intéressante ...
eyoung100