单文件复制至多不同命名目录的单行命令及递归层级复制咨询
单行复制文件到多个不同目录的解决方案
当然可以用单行命令实现,而且完全适配不同名称的目标目录,这里给你两种常用的方法:
Shell 循环单行写法:这是最直观且易读的方式,不管目标目录名字是什么都能直接用:
for dir in /a/c/ /a/d/ /a/e/; do cp /a/b/file.name "$dir"; done原理是通过
for循环遍历你列出的所有目标目录,逐个执行cp命令完成复制。xargs 配合 echo:如果偏好更简洁的管道写法,可以用这个:
echo /a/c/ /a/d/ /a/e/ | xargs -n 1 cp /a/b/file.nameecho输出所有目标目录路径,xargs -n 1会每次取一个路径作为cp的目标参数,从而完成批量复制。
复制文件到递归层级目录的方法
如果要把文件自动复制到指定目录的所有递归子目录中(比如你说的a/b/c/d结构,要把文件放到a、a/b、a/b/c、a/b/c/d这些层级里),可以用find命令实现:
find /a -type d -exec cp /a/b/file.name {} \;
find /a -type d会找出/a目录下所有的子目录(包括/a本身)-exec cp ... {} \;会对每个找到的目录执行复制命令,{}代表当前找到的目录路径。
如果需要限制递归的深度(比如只复制到a/b/c为止,不包含a/b/c/d),可以加上-maxdepth参数:
find /a -maxdepth 3 -type d -exec cp /a/b/file.name {} \;
这里-maxdepth 3表示最多遍历到从/a开始的第3层子目录(/a是第0层,a/b第1层,a/b/c第2层,a/b/c/d第3层,可根据需求调整数字)。
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

