加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:27:52 所属栏目:安全 来源:网络整理
导读:尝试安全地从收购时来到我们的严重受感染的 Windows XP和2003机器中检索文件.我有类似的需要自动化在PXE启动的DRBL机器上运行的脚本到rsync到我们的服务器. 以下代码生成单引号,将整个’–filter =”’参数包装到rsync中.注意echo会删除单引号,但不会删除rsy
尝试安全地从收购时来到我们的严重受感染的 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[@]}"

这会导致数组的每个元素被视为单个参数,而不是如前所述的整个数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读