脚本尝试创建文件,即使它不应该这样做?

Dis*_*ame 4 shell-script files test mkdir

我有一个包含一些文件夹的文件夹,这些文件夹经常移动,所以我制作了一个脚本来查看它们是否存在,如果不存在则创建它们。这就是我所做的(我虽然会)实现它:

if [ ! -f "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi
Run Code Online (Sandbox Code Playgroud)

但是,即使0folder已经存在,它仍然试图让它mkdir告诉我。像这儿;

mkdir: /Allfoldersgoeshere/subfolder/0folder: File exists
Run Code Online (Sandbox Code Playgroud)

为什么?它应该忽略它,因为它已经存在?

Tim*_*tin 12

-f您的测试是检查是否FILE存在且是一个普通文件。你需要的是-d测试是否FILE存在并且是一个目录

if [ ! -d "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi
Run Code Online (Sandbox Code Playgroud)

但是,检查目录是否存在不是强制性的。根据mkdir我们看到的手册页如下

man mkdir | grep -A1 -- -p

   -p, --parents
          no error if existing, make parent directories as needed
Run Code Online (Sandbox Code Playgroud)

但是,如果FILE存在并且是常规文件, mkdir -p则会失败

mkdir: /Allfoldersgoeshere/subfolder/0folder': Not a directory.  
Run Code Online (Sandbox Code Playgroud)

在这种情况下filedirectory在创建目录之前需要处理预期的。

  • 如果你不在乎它是什么类型的东西,你可以使用`-e`。 (3认同)