有没有一行命令/脚本可以在Linux上将一个文件复制到多个文件中?
cp file1 file2 file3
将前两个文件复制到第三个文件中。是否有办法将第一个文件复制到其余的文件中?
这个问
cp file1 file2 ; cp file1 file3
将计数作为“一行命令/脚本”吗?那么
for file in file2 file3 ; do cp file1 "$file" ; done
?
或者,如果稍微宽松一点的定义是“复制”:
tee <file1 file2 file3 >/dev/null
tee <file1 >file2 file3 file4
并且放弃两个文件的并行? - ruakhtee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null
。 - styks如果您需要一个大文件列表,可以玩玩:
tee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null
- Kelvin Feb 12 at 19:52
但有一个小错误。应该是:
tee <sourcefile.jpg targetfiles{01..50}.jpg >/dev/null
如上所述,这不会复制权限。
您可以使用来自 Bash 花括号扩展的范围来改进/简化通过 for
方法(由@ruakh回答)进行复制:
for f in file{1..10}; do cp file $f; done
file
复制到file1,file2,...,file10
中。for FILE in "file2" "file3"; do cp file1 $FILE; done
(不使用循环)
在Linux中将一个文件(fileA.txt)的内容复制到多个文件(fileB.txt, fileC.txt, fileD.txt),请使用以下组合的cat和tee命令:
cat fileA.txt | tee fileB.txt fileC.txt fileD.txt >/dev/null
shift
:file=$1
shift
for dest in "$@" ; do
cp -r $file $dest
done
shift
的作用是什么? - Peter Mortensencat file1 | tee file2 | tee file3 | tee file4 | tee file5 >/dev/null
使用以下类似的方法。它适用于zsh。
cat file > firstCopy > secondCopy > thirdCopy
或者
cat file > {1..100} - 适用于带有数字的文件名。
对于小文件很有效。
对于大文件,应使用前面提到的cp脚本。
zsh
。 - Stephane Chazelas#!/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)"
这里有一个版本,每个cp命令都会在前面加上sudo:
#!/bin/bash -e
# Filename: copy-from-one-to-may
# _ _____
# | |___ /_ __
# | | |_ \ \/ / Lex Sheehan (l3x)
# | |___) > < https://github.com/l3x
# |_|____/_/\_\
#
# Copy the contents of one file to many other files.
# Pass --sudo if you want each cp to be perfomed with sudo
# Ex: copy-from-one-to-many $(mktemp) /tmp/a /tmp/b /tmp/c --sudo
if [[ "$*" == *--sudo* ]]; then
maybe_use_sudo=sudo
fi
source=$1
shift
for dest in "$@"; do
if [ $dest != '--sudo' ]; then
$maybe_use_sudo cp $source $dest
fi
done
exit
for i in file2 file3 ; do cp file1 $i ; done