将一个文件复制到不同的、不同名称的文件夹

将一个文件复制到不同的、不同名称的文件夹

我需要将一个文件从 /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调用cp3 次并在连续调用中将 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

相关内容