メインディレクトリから1つのファイルを再帰的にすべてのディレクトリにコピーします。

メインディレクトリから1つのファイルを再帰的にすべてのディレクトリにコピーします。

私は CentOS を使用している専用サーバーを使用しており、このサーバーには 1 つのメイン ディレクトリに 5000 を超えるディレクトリがあります。

メイン ディレクトリに がありますindex.php。これを 5000 以上のディレクトリすべてにコピーしたいのですindex.phpが、手動で行う方法しか知りません。

コマンドラインから次のように入力してcp、ディレクトリから動作させる方法はありますか? 開始するメイン ディレクトリ内のすべてのディレクトリとサブディレクトリにコピーします。

答え1

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少なくとも1つのディレクトリの深さまで
  • -type d、ディレクトリのみを検索
  • -exec …、コマンド を実行しますecho cp index.php {}。ここで、{}は見つかったすべてのディレクトリに置き換えられます。このコマンドは、サブディレクトリごとに 1 回ずつ、複数回呼び出されます。

関連情報