Linux合并目录中的文本文件并在每个文件结尾处增加分页符

Linux合并目录中的文本文件,同时每个文件结尾处增加分页符

 find . -type f -name "*.java" -exec sh -c 'cat "{}"; printf "\n\f"' \; > target.java

该命令的作用是将当前目录及其子目录中的所有 .java 文件内容合并到 target.java 文件中,并在每个文件内容后添加一个换行符(\n)和一个换页符(\f)。具体分析如下:


命令拆解‌
‌find . -type f -name "*.java"‌

‌find .‌: 从当前目录开始递归搜索文件。
‌-type f‌: 仅匹配普通文件(排除目录等)。
‌-name "*.java"‌: 筛选所有以 .java 结尾的文件。
‌-exec sh -c 'cat "{}"; printf "\n\f"' \;‌

‌-exec ... \;‌: 对每个匹配的文件执行一次后续命令。
‌sh -c '...'‌: 启动一个子 Shell 执行命令字符串。
‌cat "{}"‌: 输出当前文件内容({} 会被替换为文件名)。
‌printf "\n\f"‌: 在文件内容后插入一个换行符(\n)和一个换页符(\f)。
‌> target.java‌

将所有输出重定向到 target.java 文件(覆盖写入)。

 

特殊字符处理‌:

  • "{}" 已用引号包裹,可正确处理含空格的文件名,但若文件名含引号可能导致语法错误。更安全的写法是:
     
    find . -type f -name "*.java" -exec sh -c 'cat "$1"; printf "\n\f"' _ "{}" \; >

     

 如果不使用sh调起新进程,直接使用cat命令,就无法在文件后面附加字符。所以只能通过sh的方式顺序执行指令。

# 使用分号命令依次执行
sh -c '命令1; 命令2; 命令3'

# 使用 {} 组合命令(当前 Shell 执行)
sh -c '{ 命令1; 命令2; } > output.txt'

# 使用 () 启动子 Shell 执行
sh -c '(命令1; 命令2) | 命令3'

 

posted on 2025-04-17 11:37  wolfsky  阅读(37)  评论(0)    收藏  举报

导航