循环遍历名称中包含空格的目录

时间:2018-04-17 22:42:55

标签: bash

如果有人问这个问题,我很抱歉,但我没有找到适合我的解决方案。

我写了一个小的bash脚本,它适用于普通文件夹。它应该为每个子文件夹运行一个命令。但是如果文件夹名称中有空格,则会出现问题。

如果有一个名为" New Folder"的文件夹在/ share / Download中,脚本将尝试访问文件夹" / share / Download / New" (而不是"新文件夹")

我也尝试过echo" $ d"

    for d in `find /share/Download -mindepth 1 -type d`
do
    echo
    echo $d
    curl http://localhost:2345/api/command -X POST -d '{"name": "something", "path": "'"$d"'"}' --header "X-Api-Key:123456789"
    echo
done

2 个答案:

答案 0 :(得分:2)

Shell在find的输出上正在word splitting,这就是你遇到麻烦的原因。

使用流程替换来正确读取find

的输出
while read -r d; do
  # your logic
done < <(find /share/Download -mindepth 1 -type d)

更好的是,make find会释放NUL终止的输出,以便在其中包含换行符的目录也会被正确处理:

while read -r -d '' d; do
  # your logic
done < <(find /share/Download -mindepth 1 -type d -print0)

answer可以帮助您。

答案 1 :(得分:0)

经过更多的研究,我已经找到了问题和解决方案。

表示d in不是空白保存。

以下代码可以解决问题:

    find  /share/Download -mindepth 1 -type d|while read fname; do
  curl http://localhost:1234/api/command -X POST -d '{"name": "something", "path": "'"$fname"'"}' --header "X-Api-Key:123456789"
done