如何获取根目录主文件夹名?及层级文件顶层父目录提取问题
问题解答
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
相关产品推荐
相关产品推荐

