首页 > 解决方案 > mkdir: 无法创建目录 '': 没有这样的文件或目录

问题描述

我的代码旨在找到一个 /jar 文件夹,遍历 .jar 文件并创建具有相同文件名的 .xml 和 .trigger 文件。此外,它还会在 XML 文件中创建一个 ~ID~ 文件名 ~ID~ 字段。

我收到错误

mkdir: cannot create directory '': No such file or directory

我设置了 /tmp 文件夹,包括 /xml /jar 和 /trigger 文件夹,所以那些不存在的不是问题。

#!/bin/bash

jar_dir= /c/Users/hi/Desktop/Work/tmp/jar
xml_dir= /c/Users/hi/Desktop/Work/tmp/xml
trigger_dir= /c/Users/hi/Desktop/Work/tmp/trigger       

# the following creates output directories if they don't exist

mkdir -p "${xml_dir}"
mkdir -p "${trigger_dir}"

# we start the for loop through all the files named `*.jar` located in the $jar_dir directory
for f in $(find ${jar_dir} -name "*.jar")
do
        file_id=$(basename -s .jar ${f})   # extract the first part of the file name, excluding .jar
       
      
        echo "<ID>${file_id}</ID>" > ${xml_dir}/${file_id}.xml
        touch ${trigger_dir}/${file_id}.trigger   # this one just creates an empty file at ${trigger_dir}/${file_id}.trigger
done

标签: linuxbashshell

解决方案


这个命令:

jar_dir= /c/Users/hi/Desktop/Work/tmp/jar

完全等同于

jar_dir="" /c/Users/hi/Desktop/Work/tmp/jar

并告诉 shell 运行将/c/Users/hi/Desktop/Work/tmp/jar环境变量jar_dir设置为空字符串的命令(仅在该命令的持续时间内)。如果/c/.../jar是一个目录,那也应该给你一个错误。

要将/c/.../jar字符串分配给变量,请丢失空格。

您收到的错误消息来自mkdir尝试创建一个空名称的目录。(虽然这有点令人困惑。)

对于 shell 脚本的问题,将脚本粘贴到https://www.shellcheck.net/通常会有所帮助,它可以识别大多数常见错误并告诉您该怎么做。

请参阅 SO 和 unix.SE 上的这些帖子进行讨论:


推荐阅读