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

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

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

1 ответ1

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

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

Убедившись, что он печатает все правильные команды копирования, удалите echo и выполните его. echo - это просто гарантия, показывающая, что будет делать вся команда, прежде чем делать что-то, чего вы, возможно, не захотите.

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


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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .