Я попытался скопировать файл test.txt
в несколько каталогов с помощью одной команды:
cp ~/test.txt ~/folder1 ~/folder2
Но мне не удалось. Есть ли способ сделать это в одной команде, чтобы я мог скопировать файл или даже папку в несколько каталогов?
command-line
cp
Nux
источник
источник
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Ответы:
cp
может копировать из нескольких источников, но не может копировать в несколько мест назначения. Смотритеman cp
для получения дополнительной информации.Я знаю только одну команду bash, которая может копировать / сохранять в нескольких местах назначения
tee
.Вы можете использовать его в вашем случае следующим образом:
Обратите внимание, что
tee
также записывает ввод в стандартный вывод (stdout). Так что если вы не хотите этого, вы можете предотвратить это, перенаправив стандартный вывод/dev/null
следующим образом:источник
>/dev/null
работы с бинарными файлами, не-r
опциюcp
в случае каталоговtee
отличие отcp
копирует только содержимое файла, игнорируя его режим, владельца, метки времени. Чтобы не повторять имя файла:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Другой способ получить копию в нескольких местах - следующая команда:
Если у dir1 или dir2 есть подкаталоги, в которые вы не хотите копировать файл, добавьте
-maxdepth 0
опцию:Обратите внимание, что это перезапишет каждый файл с содержимым
dir1
иdir2
вместеfile.txt
с ним, в дополнение к копированию. Чтобы копировать только,file.txt
не затрагивая другие файлы в этих каталогах, попроситеfind
действовать только в каталогах:источник
find
и два раза (в данном случае)cp
. Не скажу, чтоfind
нужно много времени.Команда
пытается скопировать два файла (
~/test.txt
и~/folder1
) в место назначенияfolder2
. (И если он~/folder2
существует и является каталогом, у вас будет предупреждение "Пропуск каталога").Если вы хотите сделать несколько копий файла
test.txt
, вы должны использовать цикл или несколько команд ...(... и будьте осторожны, если в именах файлов есть пробелы, вам нужно будет заключить в кавычки).
Чтобы скопировать целые каталоги, вы должны использовать
-r
опцию:это создаст
~/folder1/folder3
и~/folder2/folder3
со всеми включенными файлами.источник
Вы можете создать сценарий справки или сделать это с
xargs
помощью функции печати (в данном случаеecho
):Это сделает каждый каталог аргументом
cp
функции, используя тестовый файл в качестве параметра.источник
После долгих поисков эта работа как Шарм тоже!
Это скопирует файл file.txt в каждый каталог вашего текущего местоположения в терминале.
Это скопирует папку в каждый подкаталог вашего текущего местоположения в терминале.
Я разделяю это, надеюсь, что это помогает другим.
источник
zsh
, вы можете использоватьfor i in *(/); ...
для циклического перебора всех подкаталогов, чтобы избежать[ -d ...
теста. Расширенная глобализация - одна из причин, по которой мне это нравитсяbash
.zsh
первую команду этого ответа можно упростить какfor dir in *(/); do cp /path/file.txt "$dir"; done
. См. Zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Если вы хотите скопировать файл test.txt в каждый каталог в / tmp / target / ...
создать тестовую среду:
скопируйте это:
источник
Просто подумал дать вариант ответа
Sylvain Pineau
где
dir1
иdir2
нет в вашем текущем каталоге.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
Здесь команда find будет искать
dir1
два уровня или вы можете пропустить-maxdepth
параметр для поискаdir1
во всех папках в текущем каталоге и под ним.источник