Kopieren Sie eine einzelne Datei aus dem Hauptverzeichnis rekursiv in alle Verzeichnisse innerhalb

Kopieren Sie eine einzelne Datei aus dem Hauptverzeichnis rekursiv in alle Verzeichnisse innerhalb

Ich verwende CentOS auf einem dedizierten Server und habe auf diesem Server über 5000 Verzeichnisse in einem Hauptverzeichnis.

Im Hauptverzeichnis habe ich eine index.php. Ich würde diese gerne in alle 5000+ Verzeichnisse kopieren index.php, aber ich kenne nur eine Möglichkeit, es manuell zu machen.

Gibt es eine Möglichkeit, über die Befehlszeile etwas wie „einzugeben cpund es vom Verzeichnis aus zum Laufen zu bringen?“ zu tun? Ich würde es ganz nach unten durch alle Verzeichnisse und deren Unterverzeichnisse innerhalb dieses Hauptverzeichnisses kopieren, in dem ich beginne.

Antwort1

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

Der obige Befehl würde die index.phpDatei rekursiv aus Ihrem aktuellen Verzeichnis in alle Unterverzeichnisse kopieren – aber nicht sofort.

Wenn Sie sichergestellt haben, dass alle richtigen Kopierbefehle ausgedruckt werden, entfernen Sie es echound führen Sie es aus. echoDies ist nur eine Sicherheitsmaßnahme, um Ihnen zu zeigen, was der gesamte Befehl tun würde, bevor Sie tatsächlich etwas tun, was Sie möglicherweise nicht möchten.

Ein weiterer interessanter Ansatz – danke @RedGrittyBrick – wäreSymlinkdie Dateien, anstatt sie einfach zu kopieren. Auf diese Weise index.phpwären die Dateien in den Unterverzeichnissen sozusagen alle nur eine Verknüpfung zu der Datei im Stammverzeichnis und nicht dupliziert. Ändern Sie dazu im obigen Befehl cpin ln -s. Wenn Sie auf diese Weise die „Master“-Datei ändern index.php, würden alle anderen in den Unterverzeichnissen weiterhin darauf verweisen und sich daher beim Anzeigen automatisch ebenfalls ändern.


Der Vollständigkeit halber funktioniert der gesamte Befehl im Detail folgendermaßen:

  • find ., Suche im aktuellen Verzeichnis
  • -mindepth 1, mindestens ein Verzeichnis tief gehend
  • -type d, nur Verzeichnisse finden
  • -exec …führen Sie den Befehl aus echo cp index.php {}, wobei {}durch jedes gefundene Verzeichnis ersetzt wird. Dieser Befehl wird mehrmals aufgerufen, einmal für jedes Unterverzeichnis.

verwandte Informationen