Скопировать файл в несколько директорий

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

Проходя онлайн-курсы повышения квалификации обнаружил простую задачку: из командной строки скопировать файл в каталог и все его подкаталоги.

Собственно, задача разбивается на две составляющие: получить список всех подкаталогов нужного нам каталога (назовём его 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 будет исчерпан.

Добавить комментарий