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

如何获取根目录主文件夹名?及层级文件顶层父目录提取问题

问题解答

1. 复制文件时获取源根目录下的主文件夹名称

假设源目录为src,要获取每个文件对应的src下第一级文件夹(主文件夹),可通过以下两种方式实现:

  • 参数扩展法:利用Shell字符串处理特性,先移除文件路径的src/前缀,再截取第一个/之前的内容:

    src_dir="src"
    while IFS= read -r -d '' file; do
        if [ -f "$file" ]; then
            relative_path="${file#$src_dir/}"
            top_folder="${relative_path%%/*}"
            echo "文件 $file 对应的主文件夹:$top_folder"
            # 可在此添加复制逻辑,例如 cp "$file" "dest/$top_folder/"
        fi
    done < <(find "$src_dir" -type f -print0)
    
  • cut命令法:以/为分隔符,提取路径中对应位置的字段(源目录为第1个字段,主文件夹为第2个):

    src_dir="src"
    while IFS= read -r -d '' file; do
        if [ -f "$file" ]; then
            top_folder=$(echo "$file" | cut -d/ -f2)
            echo "文件 $file 对应的主文件夹:$top_folder"
        fi
    done < <(find "$src_dir" -type f -print0)
    

2. 修改Shell代码获取顶层父文件夹

针对你的input_scan目录结构,只需替换原有代码中提取父目录的逻辑,改为获取input_scan之后的第一级目录即可:

修改后的代码

while IFS= read -r -d '' file; do
    if [ -f "$file" ]; then
        relative_path="${file#input_scan/}"
        top_parent_folder="${relative_path%%/*}"
        echo "$top_parent_folder"
    fi
done < <(find "input_scan" -type f -print0)

代码说明

  • ${file#input_scan/}:删除file变量开头的input_scan/字符串,得到文件相对路径(如folder1/folder2/1.txt)。
  • ${relative_path%%/*}:删除相对路径中从第一个/到结尾的所有内容,最终得到顶层父文件夹名称(如folder1)。

运行后会输出:

folder1
folder1
folder3

分别对应5.txt、1.txt、2.txt的顶层父文件夹,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:22:52