我正在编写一个练习 bash 脚本,将文件夹保存为名为 date-foldername.bak 的 tar 存档
当未格式化的日期作为文件名的一部分插入时,脚本会失败,所以2022-05-09-work
没问题,但默认日期输出Mon 9 May 18:24:36 BST 2022
将产生:
tar: Cannot connect to Mon 9 May 18: resolve failed
在这种情况下,“解决失败”是什么意思?
代码如下:
#!/bin/bash
# Scrit accepts a folder name to back up as an parameter
# It saves the folder as a tar archive with the name date-foldername.bak
echo "Beginning backup."
d=$(date)
echo "Today's date is $d"
tar --create --verbose --file="$d-$1.bak" "$1"
echo "Backup complete."
答案1
从man 1 tar
[强调我的]:
-f
,--file=ARCHIVE
使用存档文件或设备
ARCHIVE
。[…]带有冒号的档案名称指定远程计算机上的文件或设备。冒号前面的部分作为机器名或IP地址,冒号后面的部分作为文件或设备路径名[…]
--force-local
即使存档文件带有冒号,它也是本地的。
中有冒号Mon 9 May 18:24:36 BST 2022
。tar
“认为”Mon 9 May 18
是机器名称,它会尝试解析它。这会失败。使用--force-local
。
注意,这种格式的日期排序不方便(而且不容易解析)。如果这说服您更改格式,请记住您可以首先创建不带冒号的格式。请参阅man 1 date
以了解详细信息。
答案2
格式化您的日期以免破坏 tar。
date +"%Y-%m-%d"
会工作。