如何使用 gnu cp 命令将文件复制到多个目录

2024-11-06 08:35:00
admin
原创
168
摘要:问题描述:是否可以使用 cp 命令将单个文件复制到多个目录?我尝试了以下方法,但没有效果:cp file1 /foo/ /bar/ cp file1 {/foo/,/bar} 我知道使用 for 循环或 find 是可能的。但是使用 gnu cp 命令可以吗?解决方案 1:您不能cp单独执行此操作,但可以结合...

问题描述:

是否可以使用 cp 命令将单个文件复制到多个目录?

我尝试了以下方法,但没有效果:

cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}

我知道使用 for 循环或 find 是可能的。但是使用 gnu cp 命令可以吗?


解决方案 1:

您不能cp单独执行此操作,但可以结合cp使用xargs

echo dir1 dir2 dir3 | xargs -n 1 cp file1

将复制file1dir1、、dir2dir3xargs将调用cp3 次来执行此操作,有关详细信息,请参阅手册页xargs

解决方案 2:

不可以,cp可以复制多个源,但只能复制到一个目标。您需要安排cp多次调用(每个目标一次)来执行您想要的操作;使用您所说的循环或其他工具。

解决方案 3:

通配符也适用于 Roberts 代码

echo ./fs*/* | xargs -n 1 cp test 

解决方案 4:

我会根据我在https://superuser.com/questions/32630/parallel-file-copy-from-single-source-to-multiple-targets上看到的答案使用cat并代替。tee`cp`

例如:

cat inputfile | tee outfile1 outfile2 > /dev/null

解决方案 5:

据我所知,您可以使用以下内容:

ls | xargs -n 1 cp -i file.dat

-i命令选项意味着cp您将被询问是否用覆盖当前目录中的文件file.dat。虽然这不是一个完全自动的解决方案,但对我来说它很有效。

解决方案 6:

这些答案看起来都比显而易见的要复杂得多:

for i in /foo /bar; do cp "$file1" "$i"; done

解决方案 7:

ls -db di*/subdir | xargs -n 1 cp File

-b如果目录名称中有空格,否则它将被 xargs 破坏为不同的项目,echo 版本存在此问题

解决方案 8:

本质上不使用 cp,但是......

这个问题是我在将大量 Gopro 镜头从(慢速)SD 卡复制到三个(慢速)USB 驱动器时想到的。我只想读取一次数据,因为这需要很长时间。而且我希望它是递归的。

$ tar cf - src | tee >( cd dest1 ; tar xf - ) >( cd dest2 ; tar xf - ) | ( cd dest3 ; tar xf - )

(如果您想要更多输出,可以添加更多 >() 部分。)

我还没有对此进行基准测试,但它肯定比 cp-in-a-loop(或一堆并行 cp 调用)快得多。

解决方案 9:

如果你想不使用分叉命令来执行此操作:

tee <inputfile file2 file3 file4 ... >/dev/null

解决方案 10:

要在 Mac OS 上使用通配符复制到目录,对我而言,目录名中包含xargs空格的唯一解决方案是:

find ./fs*/* -type d -print0 | xargs -0 -n 1 cp test 

test要复制的文件在哪里

以及./fs*/*要复制到的目录

问题是 xargs 将空格视为一个新参数,使用-d或更改分隔符的解决方案-E不幸在 Mac OS 上无法正常工作。

解决方案 11:

本质上相当于 xargs 答案,但如果您想要并行执行:

parallel -q cp file1 ::: /foo/ /bar/

例如,将 file1 复制到当前文件夹的所有子目录中(包括递归):

parallel -q cp file1 ::: `find -mindepth 1 -type d`

注意:这可能只会在非常特定的用例中带来明显的速度提升,例如,如果每个目标目录都是一个不同的磁盘。

它在功能上也类似于 xargs 的“-P”参数。

解决方案 12:

不可以。

我多次发现我可以使用此功能,因此我制作了自己的工具来为我完成此功能。

http://github.com/ddavison/branch

非常简单 -

branch myfile dir1 dir2 dir3

解决方案 13:

ls -d */ | xargs -iA cp file.txt A

解决方案 14:

假设您想要复制fileName.txt到当前工作目录内的所有子目录。

  1. 获取所有子目录名称ls并将它们保存到某个临时文件中,例如,allFolders.txt

ls > allFolders.txt
  1. 打印列表并将其传递给命令xargs

cat allFolders.txt | xargs -n 1 cp fileName.txt

解决方案 15:

另一种方法是使用 cat 和 tee,如下所示:

cat <source file> | tee <destination file 1> | tee <destination file 2> [...] > <last destination file>

不过我认为这会非常低效,因为作业会被拆分到多个进程中(每个目标一个进程),硬盘会同时将多个文件写入磁盘的不同部分。但是,如果您想将文件写入多个不同的驱动器,这种方法可能非常高效(因为所有复制都可以同时进行)。

解决方案 16:

使用 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

解决方案 17:

如果要将多个文件夹复制到多个文件夹,可以执行以下操作:

echo dir1 dir2 dir3 | xargs -n 1 cp -r /path/toyourdir/{subdir1,subdir2,subdir3}

解决方案 18:

如果所有目标目录都与路径表达式匹配(例如,它们都是的子目录path/to),那么只需与以下内容find组合使用:cp

find ./path/to/* -type d -exec cp [file name] {} ;

就是这样。

解决方案 19:

如果您需要具体说明将文件复制到哪些文件夹,可以将 find 与一个或多个 grep 结合使用。例如,要替换任何子文件夹中出现的 favicon.ico,您可以使用:

find . | grep favicon.ico | xargs -n 1 cp -f /root/favicon.ico

解决方案 20:

这将复制到直接子目录,如果您想更深入地了解,请调整-maxdepth参数。

find . -mindepth 1 -maxdepth 1 -type d| xargs -n 1 cp -i index.html

如果你不想复制到所有目录,希望你可以过滤掉你不感兴趣的目录。例如复制到以 开头的所有文件夹a

find . -mindepth 1 -maxdepth 1 -type d| grep /a |xargs -n 1 cp -i index.html

如果要复制到任意/不相交的目录集,则需要 Robert Gamble 的建议。

解决方案 21:

我喜欢将文件复制到多个目录中,例如:
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/

我知道这就像发出几个命令,但是当我想输入一行然后走开一会儿时,它对我来说很有效。

解决方案 22:

例如,如果您位于目标文件夹的父目录中,则可以执行以下操作:

对于 $(ls) 中的 i;执行 cp 源文件 $i;完成

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用