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'
浙公网安备 33010602011771号