
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 cp
und 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.php
Datei 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 echo
und führen Sie es aus. echo
Dies 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.php
wä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 cp
in 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 ausecho cp index.php {}
, wobei{}
durch jedes gefundene Verzeichnis ersetzt wird. Dieser Befehl wird mehrmals aufgerufen, einmal für jedes Unterverzeichnis.