Bash递归脚本问题:递归后部分文件未执行复制
cp的常见原因 重复处理的去重逻辑问题:如果没维护已处理文件的列表,同一个文件可能被多次递归触发,但如果脚本里加了“目标文件存在则跳过”的判断,一旦第一次复制成功,后续再触发就不会执行
cp;反过来,如果去重逻辑写错(比如误判文件已处理),会直接跳过原本需要复制的文件。相对路径解析错误:导入语句里的相对路径,递归处理时没切换到对应文件的目录,导致解析出来的路径无效。比如主文件在
/project/main.txt,里面写了import "./utils/helper.txt",如果递归时当前工作目录还是/,脚本会去找/utils/helper.txt而不是/project/utils/helper.txt,源文件找不到,cp自然不会执行。导入语句匹配不完整:提取导入路径的正则表达式有漏洞——比如只匹配了双引号包裹的路径,漏掉了单引号的情况;或者没考虑路径里的特殊字符(空格、下划线等),导致部分导入语句没被捕获,对应的文件也就不会被递归处理。
cp命令静默失败:权限不足、目标目录未创建、源文件损坏或为空等情况都会导致cp执行失败,但如果脚本没加错误输出(比如set -e或者cp ... || echo "复制失败"),你看不到报错,会误以为没触发cp。递归逻辑的参数或终止条件错误:递归函数的参数传递出错(比如传了空路径),或者终止条件写反,导致某些文件的处理流程没走到
cp步骤。文件格式干扰:如果导入文件用了Windows换行符(CRLF)或者非UTF-8编码,
grep、sed这类提取导入语句的命令可能无法正确识别行内容,漏过部分导入语句,进而跳过对应的文件复制。
内容的提问来源于stack exchange,提问作者konse

