rsync 文件名中带有冒号

rsync 文件名中带有冒号

我有一个相当大的目录,出于备份和便携性的原因,我需要将其同步到外部硬盘驱动器。

/work

我尝试运行以下 rsync 命令以便将此文件夹复制到我的外部硬盘驱动器:

rsync -avz /work /media/extern_drive --max-size '4G'

这似乎工作正常,除了它不复制任何带有 a 的文件:

这篇文章给出了单个文件的解决方案: rsync:文件名中的冒号,但问题是我有很多这些文件分散在不同的目录中,我无法手动完成。

有没有办法递归地同步文件名中带有冒号的任何文件?

答案1

我推测您的外部驱动器使用 VFAT 等文件系统,该系统不允许文件名中包含冒号。

一个简单的选择是将文件备份为存档(zip7ztar.xz,无论您喜欢什么)。这样,除了最大文件大小之外,您就不会受到文件系统任何特征的限制。

另一种可能性是使用rdiff 备份,它负责翻译不适合目标文件系统的文件名,如建议经过池利

处理不支持的字符的通用方法是利用文件系统层来转换文件名。这保险丝文件系统波西绍夫尔将文件名转换为 Windows VFAT 支持的名称。

mkdir ~/mnt
mount.posixovl -S /media/extern_drive ~/mnt
rsync -a /work ~/mnt
fusermount -u ~/mnt

当我在 USB 闪存盘上进行 rsync 时,如何替换冒号?了解更多详细信息,并检查该线程以获取可能出现的任何新解决方案。

答案2

我会尝试明确地包含名称中带有冒号的文件模式,如下所示:

$ rsync -avz --include '*:*' /work /media/extern_drive --max-size '4G'

例子

$ mkdir 1 2
$ touch 1/file{1..5}
$ touch 1/file:{1..5}
明确排除它们
$ rsync -avz --exclude '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5

sent 313 bytes  received 114 bytes  854.00 bytes/sec
total size is 0  speedup is 0.00
明确包括它们
$ rm -fr 2/*

$ rsync -avz --include '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5
file:1
file:2
file:3
file:4
file:5

sent 573 bytes  received 209 bytes  1,564.00 bytes/sec
total size is 0  speedup is 0.00

相关内容