bash - 从 bash 脚本运行 find 和 rsync
问题描述
我正在尝试使用 rsync 命令运行 find 。我按照这里的答案。
当我从命令行运行它时,它运行正常。
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 [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
看起来他认为 rsync 命令是 find 命令中的参数。
我该如何解决?
谢谢
解决方案
问题是您将命令分配给变量。|
不再被解析为管道“运算符”,而是作为普通字符串。
# echo 123 | cat
123
# a="echo 123 | cat"
# $a
123 | cat
的|
参数无效find
,因此它返回错误。
使用一个函数:
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)
请记住始终引用变量扩展。并且永远不要运行由未转义的变量扩展创建的命令。
约定是大写变量保留为导出变量。
推荐阅读
- c - 使用 malloc() 函数设置全局数组大小获取转储核心
- javascript - 节点js中的“memoryDataStore不是构造函数”错误
- python - 使用 Waitress 和 Flask 运行两次 API 调用
- r - 如何在ggplot中绘制表格对象
- javascript - 打开图片时如何读取图片的尺寸?
- python - 如何根据其他列的平均值创建多列
- curl - 无法使用 GitHub API v3 为组织存储库创建问题
- php - 在 xampp 3.2.2 和 php 7.2.10 中安装作曲家有问题
- reactjs - Babel 插件类属性 – React 箭头函数
- android-studio - 无法在 android studio 中使用我的小米米 A1