如何通过通配符路径批量向ami文件追加内容,无需输入完整路径
批量向指定目录下所有ami文件追加内容的解决方案
你不需要先递归搜索文件路径存入变量再操作,直接用find命令即可一步完成批量追加,这种方式比存变量更稳妥,能避免路径含特殊字符、空格时的解析错误。
你最初使用通配符加>>的写法无法实现预期效果:shell的追加重定向仅支持单个目标文件,你匹配到多个ami文件时,内容只会写入最后一个匹配到的文件。
以下是两种常用的实现方案:
方案1:find + exec 全场景适配(支持文件名/路径含空格、特殊字符的情况)
如果你要匹配/home/thomas下所有名为ami的普通文件,执行以下命令:find /home/thomas -type f -name "ami" -exec sh -c 'echo "aaa" >> "$1"' _ {} \;参数说明:
-type f限定只匹配普通文件,避免误操作同名目录- 嵌套
sh -c是为了正确处理每个匹配到的文件路径,_对应shell的$0占位符,{}是find返回的单条文件路径,对应$1
如果你需要和最初的通配符逻辑一致,只匹配路径中包含*-bbb-*的ami文件,修改命令如下:
find /home/thomas -type f -path "*/*-bbb-*/ami" -exec sh -c 'echo "aaa" >> "$1"' _ {} \;方案2:find + tee 写法更简洁
你也可以用tee命令实现批量追加:find /home/thomas -type f -name "ami" -print0 | xargs -0 tee -a >/dev/null <<< "aaa"参数说明:
-print0和xargs -0用空字符分隔文件名,规避特殊字符导致的路径解析错误tee -a表示以追加模式写入所有传入的文件路径,>/dev/null屏蔽终端的多余输出
内容的提问来源于stack exchange,提问作者ThomasHunter
相关产品推荐
相关产品推荐

