Mac(Bash+Homebrew)下向所有目录及子目录添加文件的问题求助
正确实现将文件放入指定路径所有目录及子目录的方法
之前脚本的问题
你之前的脚本错误在于反引号内的内容不是有效Shell命令,直接写//Users/oscarristolfi/Downloads/roma/* . -type d会被Bash当作可执行命令运行,自然会触发“是目录”的报错——因为它试图把目录当作命令执行。
方法一:使用find命令(推荐)
这是递归遍历目录最可靠的方式,一行命令就能完成需求:
# 复制到根路径下所有目录(包括根目录本身) find /Users/oscarristolfi/Downloads/roma -type d -exec cp index.html {} \;
如果只想复制到子目录,不想包含根路径本身,添加-mindepth 1参数:
find /Users/oscarristolfi/Downloads/roma -mindepth 1 -type d -exec cp index.html {} \;
参数说明:
-type d:仅筛选目录-exec ... \;:对每个找到的目录执行后续复制命令,{}代表当前匹配到的目录路径- 若
index.html不在当前工作目录,需写全路径,比如cp ~/Documents/index.html {}
方法二:使用for循环结合find
如果偏好循环写法,需先通过find正确获取所有目录路径再遍历:
for dir in $(find /Users/oscarristolfi/Downloads/roma -type d); do cp index.html "$dir" done
注意给$dir加双引号,避免目录名含空格时出现异常。
额外提示
- 若想避免覆盖已有
index.html时无提示,可给cp加-i参数,触发覆盖确认:cp -i index.html {} - 确保你对目标目录有写入权限,否则会出现权限报错
内容的提问来源于stack exchange,提问作者Oscardot
相关产品推荐
相关产品推荐

