运行 从 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)
记住总是引用变量扩展。并且永远不会 运行 由未转义的变量扩展创建的命令。
惯例是保留大写变量作为导出变量。
我正在尝试 运行 使用 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)
记住总是引用变量扩展。并且永远不会 运行 由未转义的变量扩展创建的命令。
惯例是保留大写变量作为导出变量。