Linux команды для копирования одного файла во многие файлы - PullRequest
36 голосов
/ 04 марта 2012

Существует ли однострочная команда / скрипт для копирования одного файла во многие файлы в Linux?

cp file1 file2 file3

копирует первые два файла в третий.Есть ли способ скопировать первый файл в остальные?

Ответы [ 9 ]

61 голосов
/ 04 марта 2012

ли

cp file1 file2 ; cp file1 file3

считать "однострочной командой / скриптом"? Как насчет

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

Или, для немного более слабого чувства "копия":

tee <file1 file2 file3 >/dev/null
4 голосов
/ 21 августа 2016

просто для удовольствия, если вам нужен большой список файлов:

tee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null - Кельвин 12 февраля в 19: 52

Но есть маленькая опечатка. Должно быть:

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

И, как уже упоминалось выше, это не копирует разрешения.

3 голосов
/ 11 апреля 2018

Вы можете улучшить / упростить for подход (ответ @ruakh) к копированию, используя диапазоны из расширение bash brace :

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

Копирует file в file1, file2, ..., file10.

Ресурс для проверки:

3 голосов
/ 04 марта 2012
for FILE in "file2" "file3"; do cp file1 $FILE; done
1 голос
/ 22 мая 2018

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

1 голос
/ 04 марта 2012

Вы можете использовать shift:

file=$1
shift
for dest in "$@" ; do
    cp -r $file $dest
done
0 голосов
/ 28 августа 2015

Используйте что-то вроде следующего.Работает на zsh.

cat file> firstCopy> secondCopy> thirdCopy

или

cat file> {1..100}- для имен файлов с номерами.

Это хорошо для небольших файлов.

Вы должны использовать упомянутый ранее скрипт cp для больших файлов.

0 голосов
/ 04 марта 2012

Вместо этого вы можете использовать стандартные скриптовые команды:

Bash:

 for i in file2 file3 ; do cp file1 $i ; done
0 голосов
/ 04 марта 2012

Самое простое / быстрое решение, которое я могу придумать, это цикл for:

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

Грязный хак был бы следующим (я настоятельно рекомендую против него, и все равно работает только в bash):

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