我正在尝试使用一个简单的 bash 脚本将我的源文件从我的网站根目录备份到我的/home/backups/files
目录。
脚本2
#!/bin/bash
#START
TIME=`date +%b-%d-%y`
FILENAME=backup-$TIME.tar.gz
SRCDIR="var/www/html/My_Site"
DESDIR="/home/backups/files"
tar cpzfP $DESDIR/$FILENAME $SRCDIR
#END
错误:
tar: /var/www/html/My_Site\r: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
我仔细检查了每一行代码中的空格,没有。
交叉检查SRC 和DES的文件夹权限,其为0777。
我不知道为什么我会得到这样的结果
Cannot stat: No such file or directory
。
答案1
在我看来,您的脚本中含有 Windows 回车符,这导致了失败。导致此问题的线索是\r
SRCDIR 变量中路径末尾的 ,错误代码中显示为。显然,在末尾/var/www/html/My_Site\r
添加 后,该路径并不存在。\r
这里有一条sed
命令,您可以在脚本上运行它来删除回车符,它将对原始脚本进行备份,名为script2.sh.bak
。
sed -i.bak 's/\r//g' script2.sh
该脚本现在应该可以正常工作,验证后您可以删除备份版本。
消除那些不需要的回车符的另一种方法是使用tr -d '\r' script2.sh
,但您需要将输出定向到新文件,然后复制该文件来替换旧文件。
另一件有用的事情是确保在脚本中使用变量时将其括起来。这是一个很好的做法。
答案2
您有写入 DESDIR 文件夹的权限吗?
另外,为了避免“tar:从成员名称中删除前导“/””请尝试以下操作:
tar cpzfP $DESDIR/$FILENAME $SRCDIR
我不知道为什么,但这对我有用。