生成文件夹的脚本

生成文件夹的脚本

我最近将服务器从 Ubuntu 14.04.1 移至 18.04,并逐步移动数据和脚本等。

我有一个脚本,每天早上以日期的形式创建一个文件夹,例如 20201017 表示 2020 年 10 月 17 日。它在 Ubuntu 14.04.1 上运行良好,但在 18.04 上行为异常。

foldername='$(date +'%Y%m%d')'
mkdir -p  /var/www/ .... /old/$foldername

我也尝试过许多其他版本,

mkdir /var/www/ ...  /old/`date +%Y%m%d'

而不是生成 20201017,而是生成 '20201017'$'\r'

任何帮助都将不胜感激,也许可以防止我秃顶。

答案1

改变这个:

foldername='$(date +'%Y%m%d')'

对此:

foldername="$(date +'%Y%m%d')"

答案2

看起来您已经在 Windows 中编辑了脚本,将标准 UNIX 行尾 ( \n) 转换为 Windows 行尾 ( \r\n)。您可以使用以下命令进行测试cat -V

cat -v yourScript.sh

你会看到类似这样的内容:

$ cat -v yourScript.sh
foldername='$(date +'%Y%m%d')'^M
mkdir -p  /var/www/ .... /old/$foldername^M

其中^M\r,您需要将其删除。最简单的方法是安装dos2unix并运行:

dos2unix yourScript.sh

或者,您可以在 sed 中执行此操作:

sed -i 's/\r//g' yourScript.sh

此后,您的脚本应该可以按预期工作。但是,您也应该借此机会进行一些小改进,并将其更改为:

mkdir -p  /var/www/ .... /old/"$(date +'%Y%m%d')"

没有理由为 设立一个单独的变量foldername,但更重要的是,你应该总是引用你的变量。因此,即使保留第二个变量,也请使用:

## Actually run the command now, otherwise, the foldername 
## will change if your script runs at 11:59 and takes more than a second.
foldername=$(date +'%Y%m%d')
mkdir -p  /var/www/ .... /old/"$foldername"

相关内容