小编thi*_*red的帖子

为什么此脚本找不到名称以空格结尾的目录

我有以下脚本来递归清理目录,当它们不再包含(任何目录)任何.mp3或.ogg文件时:

  set -u
  find -L $1 -depth -type d | while read dir
  do
    songList=`find -L "$dir" -type f \( -iname '*.ogg' -o -iname '*.mp3' \)` && {
      if [[ -z "$songList" ]]
      then
        echo removing "$dir"
        rm -rf "$dir"
      fi
    }
  done
Run Code Online (Sandbox Code Playgroud)

这种方法很有效,除非在目录中有空格作为其名称的最后一个字符的情况下find失败,在这种情况下第二个失败,如果调用脚本,则返回以下反馈.作为唯一的参数,以及具有路径的目录'./FOO/BAR BAZ '(注意末尾的空格)存在:

find: `./FOO/BAR BAZ': No such file or directory
Run Code Online (Sandbox Code Playgroud)

(注意最后遗漏的空间,但其他空格保持不变.)

我很确定这是一个引用的东西,但我试过的其他引用方式会使行为变得更糟(即更多目录失败).

bash

0
推荐指数
1
解决办法
60
查看次数

标签 统计

bash ×1