将目录转换为文件或将文件转换为目录


15

我想创建一个名为的文件test。我mkdir test不小心跑了,而不是touch test

是否可以test在名为的文件中转换目录test

将命名文件test转换为具有相同名称的目录该怎么办?


5
rm -f test && touch test除此之外,我真的不知道
Kiwy 2014年

@Kiwy是的,但是我正在想象一个旨在执行此任务的内置命令。
尼卡比曹

Answers:


12

对于我接触过的任何Unix或Linux,这都是不可能的。

在某些较旧的Unix下,目录是文件,带有特殊标记,但仍然是文件。例如,您曾经能够cat在SunOS下使用读取目录。许多现代文件系统可能都具有B +树或其他磁盘上数据结构的目录。因此,将文件转换为目录,反之亦然,总是需要删除并重新创建具有相同名称的文件。


1
有趣。如果没有人提供解决方案,我会标记这个答案。:-)
尼卡比曹

5

没有这样的命令,因为其中绝对没有意义。您的问题就像是寻求一种将盒子转换成扁平矩形的方法。您将如何处理框中(目录)中的内容?矩形如何与它来自的盒子相对应?

文件和目录具有完全不同的功能。虽然目录确实是 * nix系统中的文件,但它仅适用于系统内部,而不适用于用户(用户)看到的内容。因此,将文件转换为目录,反之亦然,将始终涉及删除文件并创建目录。您可能希望的最好的办法是使用相同的inode,但是再次强调一点。


说这没有意义是您的意见,而不是专门的事实。
Sridhar Sarnobat,

@ user7000当您“转换”为文件时,如何处理目录的内容?
terdon

文件系统以树结构存储数据。在计算机科学中,作为叶节点的树节点在向其添加子级时可以成为内部节点。不,我不会在文件系统足够时使用数据库。
Sridhar Sarnobat

2

创建一个函数来执行所需的操作。(bash或假设使用其他的Bourne / POSIX之类的shell)

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

我故意使用rmdir如果adir不是目录或不为空则失败(否-f强制)。touch仅在rmdir成功时运行。

您可以将函数定义放在shell定制文件中(.bashrcfor bash)。


@Stephane Chazelas怎么--办?
X田

2
--标记将标记结尾,因此即使文件名以开头rmdirtouch知道文件名之外的任何内容-
凯文(Kevin)

2

对于那些想知道为什么要这样做的人,请遵循以下线程:

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

显然,固件中的错误使文件的目录条目中的位翻转了,使操作系统认为它是文件夹而不是文件。

尽管我没有问题的Linksys路由器,但是某些事情将所有.jpg文件更改为空文件夹。如果有某种办法可以使NTFS目录条目是文件夹还是文件,那么我想知道这一点。

该长达2年的线程中的一种解决方案表示,如果将包含要使用文件的文件夹的硬盘驱动器连接到运行OS / X的Mac,则Mac将再次将它们视为文件,并且可以复制到Mac上的文件夹中。我没有Mac可以尝试,所以如果有人知道一种方法可以...


1

首先,在终端获得进入并执行ls -al file文件是要转换回一个实际的文件夹中的文件。如果列出了文件和子目录,则意味着您的“文件”以前是一个包含真实内容的文件夹,您可以继续:

执行:

sudo chmod 700 /

要么

sudo chmod 700 file

重新启动系统并重新获得终端访问权并执行:

sudo chmod 744 /

要么

sudo chmod 744 file

记住: “文件”应替换为您要转换回ACTUAL文件夹的文件。

这只是解决此问题的一种任意方法,但是会创建权限异常,您可以使用 fsck -f来修复(当然是在未安装的情况下)或根据需要手动设置新的权限。

再次,这只是一种行之有效的方法,可以避免删除以前是非空文件夹的文件。


有趣的方法...
eyoung100
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.