【问题标题】:rsync files from last 7 days with white-space in filenamersync 过去 7 天的文件,文件名中有空格
【发布时间】:2020-09-08 05:51:46
【问题描述】:

我写了一个 bash 脚本来将最近几天的文件同步到一个目的地。 但它不能处理带有空格的文件

rsync -rav --no-o --no-g `find /tmp/src -type f -mtime -3` /tmp/dest

它一直运行,直到带有空格的文件出现并退出:

rsync: -: unknown option
rsync error: syntax or usage error (code 1) at main.c(1554) [client=3.1.2dev]

【问题讨论】:

  • 看看--files-from=选项。
  • 顺便说一句,这里的一般错误在BashPitfalls #1 中进行了介绍。是的,你看到人们一直这样使用findls,但那些人错了。 UsingFind(而lsshouldn't be used programatically at all)中介绍了许多替代的、更好的在程序之间传递文件名列表的方法。

标签: linux bash rsync


【解决方案1】:

正如@Cyrus 所说:使用--files-from= 选项。

首先使用-printf '%P\0' 选项使find 输出以null 分隔的文件列表。它将打印相对文件路径,后跟null,以帮助处理名称中的特殊或控制字符。

通过管道将其传送到rsync--from0 选项告诉文件列表或过滤器使用null 分隔条目,--files-from=- 告诉从标准输入读取文件列表(这里的管道输入来自find)。

find /tmp/src -type f -mtime -3 -printf '%P\0' |
  rsync -rav --no-o --no-g --from0 --files-from=- --relative -- /tmp/src /tmp/dest

【讨论】:

  • @user3184895 我刚刚修复了rsync
  • 现在的问题是:它找到了文件,但它给出了 rsync 命令的完整路径。 Rsync 获取/tmp/src/file.txt 并将完整路径复制到/tmp/dest。所以执行有效,但同步文件将以/tmp/dest/tmp/src/file.txt结尾
  • @user3184895 修复了相对路径问题
猜你喜欢
  • 2012-08-08
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多