如何递归保留文件夹内各文件末尾内容并维持原目录结构
递归保留日志文件末尾内容并替换原文件(维持目录结构)
需求说明
需要递归处理logs文件夹(含嵌套子文件夹)中的所有文件,根据配置保留文件末尾指定字节数或行数,替换原文件的同时维持原有的目录层级结构。
已验证可用的字节保留实现
你使用的以下命令运行正常,可用于保留每个文件末尾指定字节数:
eval "find $TEMP_FOLDER -type f| while read f;do tail -c "${my_array[0]}" $f > ${f}.tmp && mv ${f}.tmp ${f};done"
优化版命令(更安全通用)
为了避免路径含特殊字符时出现问题,推荐改用read -r,同时去掉不必要的eval:
按字节保留(tail -c)
# 示例:保留每个文件末尾指定字节数,可替换为你的变量/数组值 find "$TEMP_FOLDER" -type f | while read -r file_path; do tail -c "${my_array[0]}" "$file_path" > "${file_path}.tmp" && mv "${file_path}.tmp" "$file_path" done
按行数保留(tail -n)
如果需要保留末尾指定行数,只需将tail -c替换为tail -n:
# 示例:保留每个文件末尾指定行数,可替换为你的变量值 line_count=50 find "$TEMP_FOLDER" -type f | while read -r file_path; do tail -n "$line_count" "$file_path" > "${file_path}.tmp" && mv "${file_path}.tmp" "$file_path" done
关键说明
- 用临时文件中转再替换原文件,避免处理过程中意外损坏原文件
find命令负责递归遍历所有文件,确保嵌套子文件夹中的文件也能被处理read -r能正确处理包含空格、反斜杠的文件路径
内容的提问来源于stack exchange,提问作者sdindiver
相关产品推荐
相关产品推荐

