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

如何用find命令将文件路径与内容分别存入两个变量?

可行,给你两种实用方案

你的原命令有两个小问题:一是变量赋值不能有空格(var = ...应该改成var=$(...)),二是*.ext应该用-name "*.ext"传给find,否则会被shell提前扩展,可能不符合预期。

要分别获取文件路径和内容到独立变量,不需要让find一次输出两者,换个思路就行:先收集所有目标文件的路径,再逐个读取内容,用数组来对应路径和内容的关系是最稳妥的方式,尤其是处理带空格/特殊字符的文件名时。

方案1:基础版(适合文件名无特殊字符)

# 获取所有匹配的文件路径,存入paths数组
paths=($(find /some/path -name "*.ext" -type f))

# 初始化contents数组存储对应文件内容
contents=()

# 遍历每个文件,读取内容
for file in "${paths[@]}"; do
    contents+=("$(cat "$file")")
done

之后你可以通过${paths[0]}获取第一个文件的路径,${contents[0]}获取对应内容,以此类推。

方案2:安全版(支持含空格/特殊字符的文件名)

如果你的文件名可能包含空格、换行或其他特殊字符,用下面的方法避免分词错误:

# 初始化两个空数组
paths=()
contents=()

# 用find的-print0输出以null分隔的路径,再通过read -d ''安全读取
while IFS= read -r -d '' file; do
    paths+=("$file")
    # 读取文件内容存入contents数组
    contents+=("$(cat "$file")")
done < <(find /some/path -name "*.ext" -type f -print0)

原理说明

find本身确实没法直接同时输出路径和内容并分存,但我们可以分两步走:

  1. 先用find筛选出所有符合条件的文件路径,存储到一个变量(数组)里;
  2. 遍历这个路径数组,逐个读取文件内容,存入另一个对应的数组。
    这样就能实现路径和内容的一一对应,分别存在独立的变量中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:32:05