Можно ли скопировать один файл в несколько каталогов с помощью команды cp?
Я попробовал следующее, которое не сработало:
cp file1 /foo/ /bar/
cp file1 {/foo/,/bar}
Я знаю, что можно использовать цикл for или найти. Но возможно ли использовать команду gnu cp?
Вы не можете сделать это в
cp
одиночку, но вы можете комбинироватьcp
сxargs
:Будет ли копировать
file1
вdir1
,dir2
иdir3
.xargs
позвонюcp
3 раза, чтобы узнатьxargs
подробности.источник
cp
одиночку». Тот факт, что ответ был полезен, предлагая другой способ, не означает, что на вопрос не было ответа.echo dir[1-3] | xargs -n 1 cp filename
).Подстановочные знаки также работают с кодом Робертса
источник
Насколько я вижу, вы можете использовать следующее:
-i
Вариантcp
команды означает , что вам будет предложено ли перезаписать файл в текущем каталоге сfile.dat
. Хотя это не полностью автоматическое решение, оно сработало для меня.источник
-i
охрану, разве это не побудит вас переписать каждый файл? а не копировать в каталоги?cp: overwrite
вопросов, но мне не нужно было отвечать ни на один из них, и это не переписывало файлы.Я бы использовал
cat
иtee
основываясь на ответах, которые я видел по адресу /superuser/32630/parallel-file-copy-from-single-source-to-multiple-targets вместоcp
.Например:
источник
cat <inputfile> | tee /path-to-files/outfile{1..4} > /dev/null
tee < inputfile outfile1 outfile2 > /dev/null
Это также полезная модель, как показывает ответ Taywee. Обратите внимание на использование io-redirection с '<', так что пайпинг от cat не нужен.Эти ответы кажутся более сложными, чем очевидные:
источник
for d in */ ; do cp $file "$i" done
ls -db di*/subdir | xargs -n 1 cp File
-b
если в имени каталога есть пробел, иначе он будет разбит на xargs как другой элемент, если возникла эта проблема с версией echoисточник
Не использую cp как таковую, но ...
Это пришло мне в голову в контексте копирования большого количества видеороликов Gopro с (медленной) SD-карты на три (медленных) USB-накопителя. Я хотел прочитать данные только один раз, потому что это заняло вечность. И я хотел, чтобы это было рекурсивно.
(И вы можете добавить больше таких разделов> (), если хотите больше выходов.)
Я не проверял это, но это определенно намного быстрее, чем cp-in-a-loop (или несколько параллельных вызовов cp).
источник
Чтобы использовать копирование
xargs
в каталоги с использованием подстановочных знаков в Mac OS, единственное решение, которое мне помогло с пробелами в имени каталога:Где
test
находится файл для копированияи
./fs*/*
каталоги для копированияПроблема в том, что xargs видит пробелы в качестве нового аргумента, решения по изменению символа разделителя с использованием
-d
или-E
, к сожалению, не работает должным образом в Mac OS.источник
Если вы хотите сделать это без разветвленной команды:
tee <inputfile file2 file3 file4 ... >/dev/null
источник
По существу эквивалентен ответу xargs, но в случае, если вы хотите параллельное выполнение:
Так, например, чтобы скопировать file1 во все подкаталоги текущей папки (включая рекурсию):
NB. Это, вероятно, сообщает о каких-либо заметных приростах скорости для очень конкретных случаев использования, например, если каждый целевой каталог представляет собой отдельный диск.
Он также функционально аналогичен аргументу '-P' для xargs.
источник
Нет, ты не можешь.
Я неоднократно обнаруживал, что могу использовать эту функцию, поэтому я сделал свой собственный инструмент, чтобы сделать это для меня.
http://github.com/ddavison/branch
довольно просто -
branch myfile dir1 dir2 dir3
источник
/e
например, по одному разу на каждой машине, то я мог бы написать свои собственные инструменты и хранить их навсегда.источник
Предположим, вы хотите скопировать
fileName.txt
все подкаталоги в текущем рабочем каталоге.Получить все имена подкаталогов
ls
и сохранить их во временный файл, скажем,allFolders.txt
Распечатайте список и передайте его команде
xargs
.источник
Другой способ - использовать кошку и тройник следующим образом:
Я думаю, что это будет довольно неэффективно, поскольку задание будет разделено на несколько процессов (по одному на место назначения), и жесткий диск будет записывать несколько файлов одновременно в разные части диска. Однако, если вы хотите записать файл на несколько разных дисков, этот метод, вероятно, будет довольно эффективным (так как все копии могут происходить одновременно).
источник
Использование bash-скрипта
источник
если вы хотите скопировать несколько папок в несколько папок, можно сделать что-то вроде этого:
echo dir1 dir2 dir3 | xargs -n 1 cp -r / path / toyourdir / {subdir1, subdir2, subdir3}
источник
Если все ваши целевые каталоги соответствуют выражению пути - как они все подкаталоги
path/to
- тогда просто используйтеfind
в комбинации сcp
этим:Вот и все.
источник
find
в теме.Если вам нужно конкретно указать, в какие папки копировать файл, вы можете объединить find с одним или несколькими greps. Например, чтобы заменить любые вхождения favicon.ico в любой подпапке, которую вы можете использовать:
источник
Это скопирует в непосредственные подкаталоги, если вы хотите пойти глубже, настройте
-maxdepth
параметр.Если вы не хотите копировать во все каталоги, надеюсь, вы можете отфильтровать каталоги, которые вам не интересны. Пример копирования во все папки, начиная с
a
При копировании в произвольный / непересекающийся набор каталогов вам понадобится предложение Роберта Гэмбла.
источник
Мне нравится копировать файл в несколько каталогов как таковой:
cp file1 /foo/; cp file1 /bar/; cp file1 /foo2/; cp file1 /bar2/
И копировать каталог в другие каталоги:cp -r dir1/ /foo/; cp -r dir1/ /bar/; cp -r dir1/ /foo2/; cp -r dir1/ /bar2/
Я знаю, что это похоже на ввод нескольких команд, но это хорошо работает для меня, когда я хочу набрать 1 строку и уйти на некоторое время.
источник
Например, если вы находитесь в родительском каталоге ваших папок назначения, вы можете сделать:
для я в $ (лс); сделать cp sourcefile $ i; сделано
источник
ls
и всегда заключайте в кавычки переменные.for i in ./*; do cp sourcefile "$i"; done