Linux命令将一个文件复制到多个文件

时间:2012-03-03 22:47:49

标签: linux cp

是否有一行命令/脚本将一个文件复制到Linux上的多个文件中?

cp file1 file2 file3

将前两个文件复制到第三个文件中。有没有办法将第一个文件复制到其余文件中?

11 个答案:

答案 0 :(得分:60)

确实

cp file1 file2 ; cp file1 file3

算作“一行命令/脚本”? <怎么样

for file in file2 file3 ; do cp file1 "$file" ; done

或者,略微宽松的“复制”感:

tee <file1 file2 file3 >/dev/null

答案 1 :(得分:4)

  

只是为了好玩,如果你需要一个很大的文件列表:

     

tee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null - Kelvin Feb 12 at 19:52

但是有一点点错字。应该是:

  

tee <sourcefile.jpg targetfiles{01..50}.jpg >/dev/null

如上所述,这不会复制权限。

答案 2 :(得分:3)

for FILE in "file2" "file3"; do cp file1 $FILE; done

答案 3 :(得分:2)

您可以使用 bash大括号扩展中的范围来改进/简化for方法(由@ruakh回答):

for f in file{1..10}; do cp file $f; done

file复制到file1, file2, ..., file10

要检查的资源:

答案 4 :(得分:1)

您可以使用shift

file=$1
shift
for dest in "$@" ; do
    cp -r $file $dest
done

答案 5 :(得分:1)

cat file1 | tee file2 | tee file3 | tee file4 | tee file5 >/dev/null

答案 6 :(得分:0)

我能想到的最简单/最快的解决方案是for循环:

for target in file2 file3 do; cp file1 "$target"; done

肮脏的黑客将是以下(我强烈反对它,并且无论如何只适用于bash):

eval 'cp file1 '{file2,file3}';'

答案 7 :(得分:0)

您可以使用标准脚本编写命令:

击:

 for i in file2 file3 ; do cp file1 $i ; done

答案 8 :(得分:0)

使用以下内容。它适用于zsh。

  

cat file&gt; firstCopy&gt; secondCopy&gt; thirdCopy

  

cat file&gt; {1..100} - 用于带数字的文件名。

这对小文件很有用。

您应该使用前面提到的cp脚本来处理更大的文件。

答案 9 :(得分:0)

我建议创建一个通用脚本和一个基于脚本的函数(空文件),以清空任意数量的目标文件。

为脚本命名从一对多复制并将其放入您的路径中。

#!/bin/bash -e
#  _ _____     
# | |___ /_  __  
# | | |_ \ \/ /  Lex Sheehan (l3x)
# | |___) >  <   https://github.com/l3x
# |_|____/_/\_\  
#
# Copy the contents of one file to many other files.

source=$1
shift
for dest in "$@"; do
    cp $source $dest
done

exit

注意事项

上面的 shift 从参数列表 ("$@") 中删除第一个元素(源文件路径)。

如何清空多个文件的示例:

用内容创建file1、file2、file3、file4和file5:

for f in file{1..5}; do echo $f > "$f"; done

清空多个文件:

copy-from-one-to-many /dev/null file1 file2 file3 file4 file5

更容易清空多个文件:

# Create files with content again
for f in file{1..5}; do echo $f > "$f"; done 

copy-from-one-to-many /dev/null file{1..5}

基于从一对多复制创建empty_files函数

function empty-files()
{
    copy-from-one-to-many /dev/null "$@"
}

示例用法

# Create files with content again
for f in file{1..5}; do echo $f > "$f"; done 
# Show contents of one of the files
echo -e "file3:\n $(cat file3)"

empty_files file{1..5}
# Show that the selected file no longer has contents
echo -e "file3:\n $(cat file3)"
<块引用>

不要只是窃取代码。改进它;用例子记录它并分享它。 - l3x

答案 10 :(得分:0)

采用最快 cp 操作

seq 1 10 | xargs -P 0 -I xxx cp file file-xxx

意思

  • seq 1 10 从 1 到 10 计数
  • | 管道 xargs
  • -P 0 并行执行 - 根据需要进行多次
  • -I xxx 每个输入 xargs 接收的名称
  • cp file file-xxx 表示将文件复制到文件 1、文件 2 等

如果文件名不同,这里是其他解决方案。
首先有将要创建的文件列表。例如

one
two
three
four
five

第二将此列表保存在磁盘上,并像以前一样使用xargs读取列表,但不使用seq

xargs -P 0 -I xxx cp file xxx  < list

这意味着 5 个并行复制操作:

cp file one  
cp file two  
cp file three  
cp file four  
cp file five  

对于 xargs,这里是幕后(5 个叉子

 3833 pts/0    Ss     0:00 bash
15954 pts/0           0:00  \_ xargs -P 0 -I xxx cp file xxx < list
15955 pts/0           0:00      \_ cp file one
15956 pts/0           0:00      \_ cp file two
15957 pts/0           0:00      \_ cp file three
15958 pts/0           0:00      \_ cp file four
15959 pts/0           0:00      \_ cp file five