当目录存在时,我们的一个远程系统mkdir -p $directory
失败。这意味着它显示
mkdir:无法创建目录' $ directory' :文件存在
这真是令人费解,因为我认为-p
的合同在目录已存在时总是成功。它适用于我尝试的其他系统。
所有这些系统上都有一个用户test
,directory=/home/test/tmp
。
答案 0 :(得分:33)
如果目录中已存在同名的文件,则可能会导致这种情况。
编辑:请注意,目录不能同时包含linux机器上同名的文件和文件夹。
答案 1 :(得分:5)
检查是否存在名称与$ directory相同的文件(不是目录)。
答案 2 :(得分:2)
答案 3 :(得分:0)
您的目录是否偶然安装了基于FUSE的网络?
除了具有该名称的文件(其他答案)之外,当曾经在该目录中装载了某些东西的 FUSE进程崩溃(或例如,用kill -9
或通过Linux OOM杀手杀掉。
要查看发生的详细情况,请运行strace -fy mkdir -p $directory
,其中显示了所有涉及的系统调用及其返回值。
我认为在这种情况下发出的错误消息是mkdir -p
(特别是gnulib
库)中的错误:
当您在安装了FUSE进程但崩溃的目录上运行它时,它说
mkdir: cannot create directory ‘/mymount’: File exists
这是非常不准确的,因为the underlying stat()
调用返回ENOTCONN (Transport endpoint is not connected)
;但是mkdir
从the previous mkdir()
sycall传播了不太明确的错误。
这特别令人困惑,因为手册页上写着:
-p, --parents
no error if existing, make parent directories as needed
因此如果目录存在也不会出错,但是ls -l /
显示:
d????????? ? ? ? ? ? files
因此,根据此(d
,它是 目录,但不是根据test -d
。
我相信更好的错误消息(在这种情况下应该发出mkdir -p
)是
mkdir: cannot create directory ‘/mymount’: Transport endpoint is not connected