我在 ubuntu 20.04 上使用一个简单的脚本来备份外部磁盘上的重要文件夹:
#!/usr/bin/env bash
cp -r /PROFILE PROFILE
cp -r /media/DATA DATA
它工作正常,除了一些文件名包含特殊字符的文件:# | ?和 '
错误是“无法创建标准文件'./DATA/Re: blahblah':参数无效”(翻译自法语错误消息)。并且该文件未被复制。
当我使用
rsync -avrq
时,相同的文件名也会产生错误并且不会被复制,但 rsync 在错误上更加详细:
rsync: recv_generator: mkdir "/destinationfolder/filename with | or : " failed: Invalid argument (22)
»rsync: mkstemp "/destinationfolder/.filename with : inside.eml.UeByTF" failed: Invalid argument (22)
»*** Skipping any contents from this failed directory ***
”我曾经有过(我认为没有“安静”选项)这个细节:«
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1207) [sender=3.1.3]
»
如何更好地使用
cp -r
或rsync
或其他不太复杂的工具来备份这些文件?我搜索过但找不到:-/
这是否与我的操作系统安装问题有关,而不是与 cp 或 rsync 使用有关?这个 UBuntu 20.04 已从 18.04 升级,有时还进行了调整。
[编辑] 目标外部 HD 分区是 NTFS(表示 gparted)或“fuse”(表示 Nautilus / Properties)。我在外部 HDD nextcloud 容器的权限上看到将其更改为 ext4 可以解决
(code 23) at main.c(1207) [sender=3.1.3]
问题。
[编辑] 看起来 rsync 使用带有“.”的临时文件前缀,有时问题出在该文件上,有时将此文件移动到最终目标文件(不带 .)时也会发生这种情况:
rsync: rename "/media/jluc/My Passport/SAVRSYNC/logo/.rubon1.ZpK66N" -> "logo/rubon1.": Invalid argument (22)
我发现 cp 名称中带有特殊字符的文件的唯一方法是将它们复制到 EXT4 分区而不是 NTFS。
所以我减少了NTFS外部硬盘分区(需要一整夜才能完成),在空闲空间中创建一个EXT4分区(标记为“EXT4ELEM”)并用它来备份我的文件:没有更多错误。
« cp "#:<>'ENE" /media/jluc/EXT4ELEM » 就可以了。
(灵感在这里找到:外部 HDD nextcloud 容器的权限)