如何利用find执行多命令并生成含文件名与内容的合并文件
解决方案
要实现这个需求,你可以用find命令结合-exec参数,对每个匹配的文件执行「输出文件名+输出文件内容」的操作,最终将结果写入目标文件。以下是两种常用实现方式:
方式一:使用find -exec直接执行
find . -maxdepth 1 -type f -name "z*" -exec sh -c 'echo "--- {} ---"; cat {}' \; > combined_result.txt
各参数说明:
.:从当前目录开始查找-maxdepth 1:仅查找当前目录(如果需要递归遍历子目录,去掉这个参数即可)-type f:只匹配普通文件,排除目录、链接等非文件类型-name "z*":匹配所有以z开头的文件名-exec sh -c '...' \;:对每个找到的文件执行shell命令——先打印带分隔标记的文件名(方便区分不同文件的内容),再输出文件内容> combined_result.txt:将所有输出重定向到目标结果文件
方式二:结合xargs实现
如果习惯用xargs,也可以这样写:
find . -maxdepth 1 -type f -name "z*" | xargs -I {} sh -c 'echo "File: {}"; cat {}' > combined_result.txt
这里-I {}表示用find输出的每个文件名替换命令中的{},效果和第一种方式一致。
如果不需要文件名的分隔标记,直接输出文件名后接内容,可以把echo部分改成echo {}即可。
内容的提问来源于stack exchange,提问作者Nyles Barnert
相关产品推荐
相关产品推荐

