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

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

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

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

cp можно копировать из нескольких источников, но не могу копирование в несколько мест назначения. Видеть man cp для получения дополнительной информации.

Единственная известная мне команда bash, которая может копировать / сохранять в несколько мест назначения, - это 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

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

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 {} \;

Команда

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 со всеми включенными файлами.

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

echo firstDir secondDir | xargs -n 1 cp test

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

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

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

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

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

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

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

mkdir /tmp/targetcd /tmp/targetmkdir -v {folder1,folder2,folder3}touch test.txt

скопируйте его:

find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;

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

где dir1 и dir2 отсутствуют в вашем текущем каталоге.

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

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

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

cat file1 >file2 >file3

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

xargs -n 1 cp file1 <<< 'file2 file3'xargs -n 1 cp -r dir1 <<< 'dir2 dir3'

Попробуйте немного изучить bash-скрипт. Это может быть очень полезно: for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; готово

Ни одной команды, но может просто помочь некоторым людям, которые натыкаются здесь: cp ~/test.txt ~/папка 1 && cp ~/test.txt ~/папка 2

Нелегко. Возможно, вы захотите изучить “rsync” для эффективного обновления нескольких существующих копий папки

Дубликат linux - How to copy a file to multiple directories using the gnu cp command - Stack Overflow .

Комментарий @ManuJärvinen может показаться легкомысленным, но он поднимает важный момент. Зачем усложнять свой сценарий? Две отдельные строки с единственной копией гораздо более удобочитаемы, чем все остальные ответы. Я не часто использовал “тройник”, поэтому, если бы я увидел принятый ответ в скрипте, я бы понятия не имел, что он делает. Я признаю, что ответы изобретательны, но в реальном сценарии вам нужны простые.