You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux find查找含单引号文件名 结果存入数组路径格式异常问题

解决方案

问题根因

  • 原有代码将find的全部输出用双引号包裹后赋值给数组,会把所有路径拼接成单个字符串存入数组的第一个元素,数组结构本身就是错误的
  • 原有-name判断逻辑冗余,-name "\'*[[:space:]]*\'" -o -name "*"等价于匹配所有文件,没有实际作用

实现步骤

第一步:正确读取find结果到数组

使用零字节作为分隔符读取find结果,完全避免文件名包含空格、换行等特殊字符导致的拆分错误:

# 读取所有可读普通文件路径到数组,零分隔符保证特殊文件名正确解析
mapfile -d $'\0' files_arr < <(find "$1" -type f -perm -a=r -print0)

第二步:路径格式化处理

对数组中每个路径做分段处理,仅给包含空格的路径段包裹单引号,无空格的段保持原样:

processed_arr=()
for raw_path in "${files_arr[@]}"; do
  # awk按/分割路径,判断每段是否含空格,含空格则加单引号后重新拼接
  formatted_path=$(awk -F/ '
  {
    for(i=1;i<=NF;i++){
      if($i ~ /[[:space:]]/) $i = "\047" $i "\047"
    }
    print
  }' OFS=/ <<< "$raw_path")
  processed_arr+=("$formatted_path")
done

效果验证

对路径not easy/file one处理后得到'not easy'/'file one',对无空格路径data/log.txt处理后保持原格式不变,完全符合需求。

内容的提问来源于stack exchange,提问作者Thomas99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:01