是否有一行命令/脚本将一个文件复制到Linux上的多个文件中?
cp file1 file2 file3
将前两个文件复制到第三个文件中。有没有办法将第一个文件复制到其余文件中?
答案 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
从参数列表 ("$@"
) 中删除第一个元素(源文件路径)。
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}
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