我需要将一个文件从 /a/b/ 文件夹复制到 /a/c/、a/d/、a/e/
除了使用
cp 文件名 /a/c cp 文件名 /a/d cp 文件名 /a/e
在终端中,有没有办法使用一行?我已经阅读并看到有方法,但我认为我的情况不同,因为我的目标文件夹名称不同。
我还想问一下,是否可以将文件 cp 到目标文件夹并进行一个递归级别。因此,如果有一个文件夹包含 a/b/c/d,而你将它放入 a,它会转到 b 和 b/c,而不是 b/c/d。
答案1
那很糟糕,因为cp can copy multiple sources but cannot copy to multiple destinations
这正是您所需要的。要使它工作,您必须多次调用 cp - 每个您已经尝试过的目的地一次。您可以通过以下方式实现您想要的
1. 使用 for 循环
for i in /a/c/ a/d/ a/e/; do cp "$file" "$i"; done
这是很容易理解的。
2.cp
结合xargs
:
$ echo dir1 dir2 dir3 | xargs -n 1 cp file1
将把 file1 复制到 dir1、dir2 和 dir3。xargs 将调用 cp 3 次来执行此操作。将xargs
调用cp
3 次并在连续调用中将 file1 复制到 dir1、dir2 和 dir3 。
在你的情况下
$ echo /a/c/ a/d/ a/e/ | xargs -n 1 cp /a/b/file
有关 xargs 的更多详细信息,请参阅手册页。
答案2
这有点像作弊,但您可以使用以下方法将文件内容重定向到多个目的地tee
:
tee a/{b..d}/file.name < file.name > /dev/null