我找不到这个问题的解决方案。我想创建一个脚本来创建一个文件夹,使用当前日期作为其名称。然后,该脚本应将所有内容从当前文件夹复制到新创建的文件夹。 我已经尝试过以下方法但不起作用:
但是当我尝试在终端(也是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”:没有这样的文件或目录
这看起来确实是备份目录不存在,并且没有创建
!/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
的代码迭代)
希望这能为将来如何调试提供一些见解。