bash 脚本 - tar 无法统计:没有这样的文件或目录,由于之前的错误而以失败状态退出

bash 脚本 - tar 无法统计:没有这样的文件或目录,由于之前的错误而以失败状态退出

我正在尝试使用一个简单的 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
  1. 我仔细检查了每一行代码中的空格,没有。

  2. 交叉检查SRC 和DES的文件夹权限,其为0777。

我不知道为什么我会得到这样的结果 Cannot stat: No such file or directory

答案1

在我看来,您的脚本中含有 Windows 回车符,这导致了失败。导致此问题的线索是\rSRCDIR 变量中路径末尾的 ,错误代码中显示为。显然,在末尾/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

我不知道为什么,但这对我有用。

相关内容