我有一个相当大的目录,出于备份和便携性的原因,我需要将其同步到外部硬盘驱动器。
/work
我尝试运行以下 rsync 命令以便将此文件夹复制到我的外部硬盘驱动器:
rsync -avz /work /media/extern_drive --max-size '4G'
这似乎工作正常,除了它不复制任何带有 a 的文件:
。
这篇文章给出了单个文件的解决方案: rsync:文件名中的冒号,但问题是我有很多这些文件分散在不同的目录中,我无法手动完成。
有没有办法递归地同步文件名中带有冒号的任何文件?
答案1
我推测您的外部驱动器使用 VFAT 等文件系统,该系统不允许文件名中包含冒号。
一个简单的选择是将文件备份为存档(zip
、7z
、tar.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