
Я работаю на выделенном сервере с 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 {}
, где{}
заменяется на каждый найденный каталог. Эта команда вызывается несколько раз, один раз для каждого подкаталога.