尝试安全地从收购时来到我们的严重受感染的
Windows XP和2003机器中检索文件.我有类似的需要自动化在PXE启动的DRBL机器上运行的脚本到rsync到我们的服务器.
以下代码生成单引号,将整个’–filter =”’参数包装到rsync中.注意echo会删除单引号,但不会删除rsync.我究竟做错了什么?将每个参数作为数组中的条目会有帮助吗?
失败因为包裹单引号:
'--filter='\''- "Default User/"'\'' --filter='\''- "Application Data/"'\'' '
当我运行相同的命令但手动删除包装单引号时,rsync运行正常.
作品:
--filter='\''- "Default User/"'\'' --filter='\''- "Application Data/"'\''
没有和没有–protect-args尝试过.
#!/bin/sh -x PROTECTARGS=--protect-args EXCLUDE=( '- "Default User/"' '- "Application Data/"' ) echo EXCLUDE="${EXCLUDE[*]}" FILTER=() for X in "${EXCLUDE[@]}"; do FILTER=( "${FILTER[@]}" "--filter='${X}' " ); done; echo FILTER="${FILTER[*]}" if [ "1" == "1" ]; then rsync --dry-run -vv --stats \ --recursive \ "$PROTECTARGS" \ "${FILTER[*]}" \ '/hddOld/Documents and Settings' \ '/hddNew/' fi;
OUTPUT:
FILTER=--filter='- "Default User/"' --filter='- "Application Data/"' + '[' 1 == 1 ']' + rsync --dry-run -vv --stats --recursive --protect-args '--filter='\''- "Default User/"'\'' --filter='\''- "Application Data/"'\'' ' '/hddOld/Documents and Settings' /hddNew/ UnkNown filter rule: `'- "Default User/"' --filter='- "Application Data/"' ' rsync error: Syntax or usage error (code 1) at exclude.c(817) [client=3.0.6]
bash-4.1.2-14.el6.x86_64 rsync version 3.0.6 protocol version 30 rsync-3.0.6-9.el6.x86_64 CentOS 6.4 x64
工作……不,它没有:
FILTER+=( --filter=""${X}"" ); RESULTS IN: '--filter=- "Default User/" --filter=- "Application Data/"'
rsync不会抱怨此过滤规则,但实际上并未过滤掉“Application Data /”.
我这样做是为了工作:
我变了:
EXCLUDE=( '- "Default User/"' '- "Application Data/"' )
至
EXCLUDE=( '-_Default User/' '-_Application Data/' )
这删除了双引号并在“ – ”后面使用了替换下划线“_”语法.先前的回答提示了这一点,但我必须添加“_”语法才能让它适合我.
也改变了:
FILTER=( "${FILTER[@]}" "--filter='${X}' " );
至
FILTER=( "${FILTER[@]}" "--filter=${X}" );
这从X变量替换中删除了撇号.
并改变了:
"${FILTER[*]}"
至
"${FILTER[@]}"
这会导致数组的每个元素被视为单个参数,而不是如前所述的整个数组.
原文地址:https://www.jb51.cc/bash/385276.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。