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

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

Я работаю на выделенном сервере с CentOS, и на этом сервере у меня более 5000 каталогов в одном главном каталоге.

В главном каталоге у меня есть index.php. Я хотел бы скопировать его index.phpво все 5000+ каталогов, но единственный известный мне способ — сделать это вручную.

Есть ли способ через командную строку, чтобы я мог ввести что-то вроде cpи заставить это работать из каталога? Я бы скопировал это вниз по всем каталогам и подкаталогам в этом главном каталоге, с которого я начинаю.

решение1

find . -mindepth 1 -type d -exec echo cp index.php {} \;

Приведенная выше команда рекурсивно скопирует index.phpфайл из текущего каталога во все подкаталоги, но не сразу.

Когда вы убедитесь, что он печатает все правильные команды копирования, удалите echoи выполните его. echoЭто всего лишь мера предосторожности, которая показывает вам, что будет делать вся команда, прежде чем она действительно сделает что-то не то, что вам нужно.

Еще один интересный подход – спасибо @RedGrittyBrick – этосимволическая ссылкафайлы вместо того, чтобы просто копировать их. Таким образом, index.phpвсе файлы в подкаталогах будут просто ярлыком, так сказать, для файла в корневом каталоге и не будут дублироваться. Чтобы сделать это, в приведенной выше команде измените cpна ln -s. Таким образом, когда вы измените файл "master" index.php, все остальные в подкаталогах будут по-прежнему указывать на него и, таким образом, автоматически изменяться при просмотре.


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

  • find ., поиск в текущем каталоге
  • -mindepth 1, пройдя по крайней мере один каталог вглубь
  • -type d, найти только каталоги
  • -exec …, выполните команду echo cp index.php {}, где {}заменяется на каждый найденный каталог. Эта команда вызывается несколько раз, один раз для каждого подкаталога.

Связанный контент