`tar: 无法连接到...: 解析失败` 是什么意思?

use*_*191 26 linux bash tar

我正在编写一个练习 bash 脚本,它将文件夹保存为 tar 存档,名称为 date-foldername.bak

当未格式化的日期作为文件名的一部分插入时,脚本会失败,所以2022-05-09-work没问题,但默认的日期输出Mon 9 May 18:24:36 BST 2022将产生:

  tar: Cannot connect to Mon  9 May 18: resolve failed
Run Code Online (Sandbox Code Playgroud)

在这种情况下“解决失败”是什么意思?

这是代码:

#!/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."
Run Code Online (Sandbox Code Playgroud)

Kam*_*ski 63

来自man 1 tar[强调我的]:

\n
\n

-f,--file=ARCHIVE

\n

使用归档文件或设备ARCHIVE。[\xe2\x80\xa6]

\n

包含冒号的存档名称指定远程计算机上的文件或设备。冒号前面的部分作为机器名或IP地址,后面的部分作为文件或设备路径名 [\xe2\x80\xa6]

\n

--force-local

\n

存档文件是本地的,即使它有冒号。

\n
\n

中有冒号Mon 9 May 18:24:36 BST 2022tar“认为”Mon 9 May 18是一个机器名称,它尝试解析它。这失败了。使用--force-local

\n

请注意,这种格式的日期不方便排序(并且不易解析)。如果这说服您更改格式,请记住您可以首先创建不带冒号的格式。man 1 date详情请参阅。

\n

  • @Dubu afaik,至少对于NTFS,它不允许使用冒号。Windows 可以,但 NTFS 本身不行。例如阅读[此处](https://superuser.com/questions/714607/how-to-open-files-with-colons-in-their-names-in-windows),Linux可以使用冒号在NTFS上创建文件。虽然是的,但在 Windows 下处理此类文件是一件很痛苦的事情。 (3认同)
  • 请注意,tar 的这种不当行为是 GNU tar 所独有的,至少在我所知道的现代 tar 版本中是这样。您可以制作一个名为 tar 的脚本来执行 `exec /usr/bin/tar --force-local "$@"` 并将其放在 `/usr/bin` 之前的路径中的某个位置来修复它。 (3认同)
  • 请注意,您无法在 Windows 文件系统(FAT、VFAT、exFAT、NTFS)上保存名称中带有冒号的文件。 (2认同)

chi*_*cks 11

设置日期格式,以免破坏 tar.gz。

date +"%Y-%m-%d"
Run Code Online (Sandbox Code Playgroud)

会工作。