Как скопировать файл в несколько папок с помощью командной строки?

Я попытался скопировать файл test.txt к нескольким каталогам с одной командой:

cp ~/test.txt ~/folder1 ~/folder2

Но я не успешно выполнялся. Существует ли способ сделать это в одной команде, таким образом, я могу скопировать файл или даже папку к нескольким каталогам?

68
задан 27 August 2014 в 04:43

8 ответов

cp может скопировать с многочисленных источников, но не может копия нескольким местам назначения. См. man cp для большего количества информации

единственная команда удара, которую я знаю, который может копировать/сохранять в несколько мест назначения, tee.

можно использовать его в случае следующим образом:

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt

Примечание, что tee также записи вход к стандартному выводу (stdout). Таким образом, если Вы не хотите это, можно предотвратить его путем перенаправления стандартного вывода к /dev/null следующим образом:

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
72
ответ дан 22 November 2019 в 23:31

Другим способом достигнуть копии к нескольким местоположениям является следующая команда:

find dir1 dir2 -exec cp file.txt {} \;

, Если dir1 или dir2 имеют подкаталоги, в которые Вы не хотите файл, скопированный, добавьте -maxdepth 0 опция:

find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;

Примечание, что это перезапишет каждый файл в dir1 и dir2 с file.txt содержание, в дополнение к копированию его. Чтобы только скопировать file.txt, не влияя на другие файлы в этих каталогах скажите find только действовать на каталоги:

find dir1 dir2 -type d -exec cp file.txt {} \;
61
ответ дан 22 November 2019 в 23:31

Команда

cp ~/test.txt ~/folder1 ~/folder2

пытается скопировать два файла (~/test.txt и ~/folder1) месту назначения folder2. (И если ~/folder2 будет существовать и будет каталог, то у Вас будет "каталог исключения" предупреждением).

, Если Вы хотите сделать несколько копий файла test.txt, необходимо использовать цикл или несколько команд...

for i in ~/folder1 ~/folder2; do cp  ~/test.txt $i; done 

(... и быть осторожными, если у Вас есть пробелы, встроенные в имена файлов, Вам будет нужно заключение в кавычки).

Для копирования целых каталогов необходимо использовать -r опция:

for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done

это создаст ~/folder1/folder3 и ~/folder2/folder3 со всеми включенными файлами.

31
ответ дан 22 November 2019 в 23:31

Можно создать сценарий справки, или можно сделать это с xargs и функция печати (в этом случае, echo):

echo firstDir secondDir | xargs -n 1 cp test

Это сделает каждый каталог как аргумент эти cp функция, с помощью тест файл в качестве параметра.

23
ответ дан 22 November 2019 в 23:31

После долгого поиска эта работа как Очарование также!

for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done

Это скопирует file.txt к каждому каталогу в Вашем текущем местоположении в терминале.

for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done

Это скопирует папку в каждый подкаталог в Вашем текущем местоположении в терминале.

я совместно использую его, надеются, что это помогает другим также.

7
ответ дан 22 November 2019 в 23:31

Если Вы хотите скопировать файл test.txt в каждом каталоге в/tmp/target/...

создают тестовую среду:

mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt

копия это:

find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
1
ответ дан 22 November 2019 в 23:31

Просто мысль для предоставления изменения ответу Sylvain Pineau

, где dir1 и dir2 не находятся в текущем каталоге.

find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;

здесь находка будет искать dir1 два уровня глубоко, или можно не учесть -maxdepth параметр для нахождения dir1 во всех папках в текущем каталоге и ниже ее.

0
ответ дан 22 November 2019 в 23:31

Только для файлов без сохранения атрибутов. Отлично, если вы копируете огромные файлы и хотите прочитать их только один раз:

cat file1 >file2 >file3

Для файлов или каталогов

xargs -n 1 cp file1 <<< 'file2 file3'
xargs -n 1 cp -r dir1 <<< 'dir2 dir3'
0
ответ дан 31 January 2020 в 07:06

Другие вопросы по тегам:

Похожие вопросы: