当 运行 'find' 在名称之间有 space 的目录上时部署中断

Deploy breaks when running 'find' on a directory with space in between name

我们最近遇到了一个问题,其中使用了带有 spaces 的目录之一,并且当我们递归地在目录上 运行 find 时。它在找到带有 space 的目录时中断,并且不会继续部署。下面是 cap deploy 的截图:-

*     executing "sudo -p 'sudo password: ' find /srv/vhosts/static_cap -type d | xargs sudo -p 'sudo password: ' chmod -R 755"
      servers: ["web00.xx.com"]
      [web00.xx.com] executing command
      [web01.xx.com] executing command
**     [out :: web00.xx.com] 
**     [out :: web01.xx.com] 
**     [out :: web00.xx.com] chmod: cannot access `/srv/vhosts/static_cap/public_uploads/xx/0.9/90/Color'
**     [out :: web00.xx.com] : No such file or directory
**     [out :: web00.xx.com] chmod: cannot access `Id': No such file or directory
  command finished in 1133ms
    failed: "sh -c 'sudo -p '\''sudo password: '\'' find /srv/vhosts/static_cap -type d | xargs sudo -p '\''sudo password: '\'' chmod -R 755'" on web00.buzzaa.com

它试图 运行 查找的目录看起来像这样 :-

xx@web00:~$ ls -ld /srv/vhosts/xx_cap/xx/0.9/90/Color\ Id/
drwxr-xr-x+ 2 root webadmins 4096 Jun 11 07:26 /srv/vhosts/xx_cap/xx/0.9/90/Color Id/

有没有办法可以将此目录名称作为一个而不是在正则表达式字符处中断?

似乎 find 命令将分隔符为 space 的每个目录都视为一个单独的目录,这就是为什么它将 "Color" 和 "Id" 视为两个不同的目录。好吧,这也是 Capistrano 2.x 中的一个已知问题,并且会出现在查找命令 https://github.com/capistrano/capistrano/issues/300 中。 我的情况是只更改目录内所有文件的所有权,所以我处理的方式是简单地调用 chown 命令而不是使用管道查找 :-

任务:nimbuzz_bef_prem做 交易做 运行 "#{sudo} chmod -R 755 #{deploy_to}" 运行 "#{sudo} chown -R www-data:xyz #{deploy_to}" 结尾 结束