mkdir:无法创建目录没有这样的文件或目录

问题描述 投票:0回答:1

我找不到这个问题的解决方案。我想创建一个脚本来创建一个文件夹,使用当前日期作为其名称。然后,该脚本应将所有内容从当前文件夹复制到新创建的文件夹。 我已经尝试过以下方法但不起作用:

  • 使用“mkdir -p”创建父目录
  • 不使用带有“pwd”的相对路径

但是当我尝试在终端(也是bash)中的脚本中创建一个目录时,我可以创建带有日期的完美目录。 (以下命令)

mkdir 备份$(日期+%d-%m-%Y_%H:%M)

我的代码

#!/bin/bash

DATE=$(date +%d-%m-%Y_%H:%M)
PWD=$(pwd)
FILENAME=backup$DATE

if [ -d "backup/" ]; then
    mkdir -p backup/$FILENAME
    cp -r * backup/$FILENAME
else
    mkdir -p backup/
    mkdir -p backup/$FILENAME
    cp -r * backup/$FILENAME
fi

抛出错误

mkdir:无法创建目录“backup/backup18-01-2022_12:43”:没有这样的文件或目录

linux bash shell sh
1个回答
0
投票

这看起来确实是备份目录不存在,并且没有创建

!/usr/bin/env bash                                                                                                                                                                            

# for extra debugging / tracing, uncomment this:                                                                                                                                               
# set -x                                                                                                                                                                                       

DATE=$(date +%d-%m-%Y_%H:%M)
PWD=$(pwd)
FILENAME=backup$DATE

# printing out our variables, to make sure there's nothing weird in them:                                                                                                                      
printf "\nDATE:     %s\n" "${DATE}"
printf "PWD:      %s\n" "${PWD}"
printf "FILENAME: %s\n\n" "${FILENAME}"

# I took out the if statments ( they become redundant with mkdir -p )                                                                                                                          
# and also removed the cp action, since it's not really relevant here.                                                                                                                         


printf "Without the backup directory created, I'll spit out the error you had:\n\n"
mkdir    backup/${FILENAME}


printf "\n\nBut by using the -p argument, it can create the directory:\n\n"
mkdir -p backup/${FILENAME}

ls -l backup

printf "\n\n"

查看输出:

$ ./backup.sh 

DATE:     09-02-2024_15:49
PWD:      /home/matt/data/playground/stackoverflow
FILENAME: backup09-02-2024_15:49

Without the backup directory created, Ill spit out the error you had:

mkdir: cannot create directory ‘backup/backup09-02-2024_15:49’: No such file or directory


But by using the -p argument, it can create the directory:

total 4
drwxr-xr-x 2 matt matt 4096 Feb  9 15:49 backup09-02-2024_15:49

输出消息与最初显示的消息相同。

我修改了你的代码,其中包括

set -x
,它是 bash 的跟踪/调试实用程序...并且我打印了你的变量(以防万一它们出现奇怪的情况)...以及 if/else无论目录是否存在, /fi 语句都会执行相同的操作,因为
mkdir -p backup
都存在,因此它们实际上是多余的。

通过多次运行代码,错误不存在,并且您可以看到新备份目录的输出,其中包含时间戳。

实际上没有更多的内容可以继续,但是能够复制输出让我有相当大的信心,目录只是没有正确创建(可能是来自之前没有

mkdir -p
的代码迭代)

希望这能为将来如何调试提供一些见解。

© www.soinside.com 2019 - 2024. All rights reserved.