Answers:
否,cp
可以复制多个来源,但只能复制到一个目标。您需要安排cp
多次调用-每个目标一次-要执行的操作;如您所说,使用循环或其他工具。
您不能cp
独自做到这一点,但可以结合cp
使用xargs
:
echo dir1 dir2 dir3 | xargs -n 1 cp file1
将复制file1
到dir1
,dir2
和dir3
。 xargs
将调用cp
3次以执行此操作,xargs
有关详细信息,请参见手册页。
cp
”仅仅是因为尝试通过提出另一种方式来尝试提供帮助并不意味着问题没有得到解决。
echo dir[1-3] | xargs -n 1 cp filename
)。
据我所见,您可以使用以下内容:
ls | xargs -n 1 cp -i file.dat
该-i
的选项cp
命令意味着你会被询问是否覆盖文件与当前目录file.dat
。尽管它不是一个完全自动化的解决方案,但它为我解决了。
-i
保护措施是一件好事,但会不会提示您覆盖每个文件?而不是复制到目录?
cp: overwrite
问题,但我不必回答任何问题,也没有覆盖文件。
我会用cat
和tee
基于我在看到答案/superuser/32630/parallel-file-copy-from-single-source-to-multiple-targets代替cp
。
例如:
cat inputfile | tee outfile1 outfile2 > /dev/null
cat <inputfile> | tee /path-to-files/outfile{1..4} > /dev/null
tee < inputfile outfile1 outfile2 > /dev/null
Taywee的回答也显示了这种有用的模式。请注意,将io-redirection与'<'一起使用,因此不需要从cat进行管道传输。
要xargs
在Mac OS上使用通配符复制到目录,唯一对我有用的解决方案是在目录名中带有空格:
find ./fs*/* -type d -print0 | xargs -0 -n 1 cp test
哪里test
是要复制的文件
和./fs*/*
目录复制到
问题是xargs将空格视为新参数,使用-d
或-E
不幸的是,更改定界符字符的解决方案在Mac OS上无法正常工作。
你不能。
我发现我可以多次使用此功能,因此我已经制作了自己的工具来为我完成此任务。
http://github.com/ddavison/branch
很简单-
branch myfile dir1 dir2 dir3
/e
每台机器上一次,那么我可以编写自己的Powertools并将其永久保存。
假设您要复制fileName.txt
到当前工作目录中的所有子目录。
通过获取所有子目录名称ls
并将其保存到某个临时文件中,例如,allFolders.txt
ls > allFolders.txt
打印列表并将其传递给command xargs
。
cat allFolders.txt | xargs -n 1 cp fileName.txt
使用bash脚本
DESTINATIONPATH[0]="xxx/yyy"
DESTINATIONPATH[1]="aaa/bbb"
..
DESTINATIONPATH[5]="MainLine/USER"
NumberOfDestinations=6
for (( i=0; i<NumberOfDestinations; i++))
do
cp SourcePath/fileName.ext ${DESTINATIONPATH[$i]}
done
exit
如果所有目标目录都与路径表达式匹配(就像它们都是的子目录一样),path/to
则只需将其find
与以下命令结合使用cp
:
find ./path/to/* -type d -exec cp [file name] {} \;
而已。
find
在线程中使用的其他所有答案都投下反对票。
我喜欢将文件复制到多个目录中,例如:
cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/
将目录复制到其他目录中:
cp -r dir1/ /foo/; cp -r dir1/ /bar/; cp -r dir1/ /foo2/; cp -r dir1/ /bar2/
我知道这就像发出几个命令一样,但是当我想输入1行并走一会儿时,它对我来说效果很好。
例如,如果您在目标文件夹的父目录中,则可以执行以下操作:
因为我在$(ls)中;执行cp sourcefile $ i; 完成
ls
,并始终引用变量。 for i in ./*; do cp sourcefile "$i"; done