运行 从 bash 脚本中查找和 rsync

Run find and rsync from bash script

我正在尝试 运行 使用 rsync 命令查找。 我按照答案here
当我从命令行 运行 它 运行 好的。

find ./copy1 -mtime +14  -printf %P\0 | rsync -avc --dry-run --files-from=- --from0 ./copy1 /home/shlo/copy1/

当我从 bash 脚本 运行 开始时,问题开始了:

RSYNC_COM='find ./copy1 -mtime +14  -printf %P\0 | rsync -avc --dry-run --files-from=- --from0 ./copy1 /home/shlo/copy1/'
output=$($RSYNC_COM 2>&1)

我收到错误:

find: paths must precede expression: | Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

看来他认为rsync命令是find命令中的参数

我该如何解决?

谢谢

问题是您将命令分配给了一个变量。 | 不再解析为管道 "operator",而是解析为普通字符串。

# echo 123 | cat
123
# a="echo 123 | cat"
# $a
123 | cat

|find 的无效参数,因此它 returns 是一个错误。

使用函数:

rsync_com() {
         find ./copy1 -mtime +14  -printf %P\0 |
         rsync -avc --dry-run --files-from=- --from0 ./copy1 /home/shlo/copy1/
}
output=$(rsync_com 2>&1)

记住总是引用变量扩展。并且永远不会 运行 由未转义的变量扩展创建的命令。

惯例是保留大写变量作为导出变量。