微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – rsync不删除字符串数组周围的单引号–filter list

尝试安全地从收购时来到我们的严重受感染的 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 举报,一经查实,本站将立刻删除。

相关推荐