tar 命令在 shell 脚本中生成错误

Jér*_*nge 7 tar shell-script filenames

我正在尝试在 shell 脚本中创建一个 tar 球(我已启用set -x),但出现以下错误:

+ cd /home5/mysite/public_html
+ TAR_DUMP=gypo_2012-02-18-03:51:15.tar.gz
+ echo 'Tar name: gypo_2012-02-18-03:51:15.tar.gz'
Tar name: gypo_2012-02-18-03:51:15.tar.gz
+ tar -cvzf gypo_2012-02-18-03:51:15.tar.gz gypo
...
tar: gypo_2012-02-18-03\:44\:04.tar.gz: Cannot open: Input/output error
tar: Error is not recoverable: exiting now
...
Run Code Online (Sandbox Code Playgroud)

脚本是:

NOW=$(date +"%Y-%m-%d-%T")

# TAR

cd $HOME/public_html
TAR_DUMP="gypo_$NOW.tar.gz"
echo "Tar name: $TAR_DUMP"
tar -cvzf $TAR_DUMP gypo
# mv -t $DEST $TAR_DUMP
Run Code Online (Sandbox Code Playgroud)

为什么 tar 会产生此错误,我该如何解决?

Mat*_*Mat 7

:在文件名的混乱 tar。至少对于 的coreutils版本tar--file开关可以采用以下形式的参数:

hostname:/remote/file/name
Run Code Online (Sandbox Code Playgroud)

所以我猜tar是试图以一种不是你的意思的方式解释那个文件名。

为文件名添加前缀./(或指定完整路径)应该可以解决您的问题。

TAR_DUMP="./gypo_$NOW.tar.gz"
echo "Tar name: $TAR_DUMP"
tar -cvzf $TAR_DUMP gypo
Run Code Online (Sandbox Code Playgroud)

另一个解决方法是添加--force-local开关。

--force-local

强制 `tar' 将提供给 --file 的文件名解释为本地文件,即使它看起来像远程磁带驱动器名称。