Как скопировать файл в несколько директорий
Проходя онлайн-курсы повышения квалификации обнаружил простую задачку: из командной строки скопировать файл в каталог и все его подкаталоги.
Собственно, задача разбивается на две составляющие: получить список всех подкаталогов нужного нам каталога (назовём его catalog) и затем скопировать в каждый из них наш файл (назовём его file).
Первую задачу можно выполнить двумя сопсобами, например командой
du | cut -f2
либо командой
find catalog/ -type d
Теперь нужно направить вывод одной из команд выше на ввод команды cp
Итак, файлы копируются следующим образом:
cp file catalog/
Однако, при выполнении данной команды файл скопируется только в нужный каталог, но не во все подкаталоги. Опция -r (или -R что для cp одно и то же) копирует только вложенные подкаталоги, то есть если мы хотим скопироваьт каталог со всеми подкаталогами в другую директорию — это оно, но у нас обратная задача.
Не помогает так же и xargs или я просто не очень научился его готовить.
Впрочем, нас спасет опция команды find а именно -exec
Используется так:
find catalog/ -type d -exec cp file {} \;
Здесь {} обозначают то место, куда будет подставляться вывод команды find, а ; определяет окончание выполнения после того как вывод команды find будет исчерпан.