Ich erstelle ein einfaches Skript, das alle Dateien aus DIRECTORYA kopiert, die in DIRECTORYB nicht vorhanden sind. Ich mache das mit dem Befehl cp:
cp -u DIRECTORYA/* DIRECTORYB
Ich möchte auch eine E-Mail an einen Administrator senden, in der die kopierten Dateien aufgelistet sind.
Bevor ich den obigen Befehl ausführe, möchte ich im Idealfall die zu kopierenden Dateien abrufen und in einer Variablen speichern, um sie später beim Erstellen meiner E-Mail-Nachricht zu verwenden.
Kann mich jemand in die richtige Richtung weisen? Ich habe versucht, grep zu verwenden, aber ich glaube nicht, dass dies mit dem Befehl cp möglich ist.
-v
Flagge nicht verwenden , um die Dateinamen beim Kopieren auszudrucken? Leiten Sie das in eine Datei oder direkt in eine Variable um und erstellen Sie damit Ihre Nachricht.cp
Befehl die Option--attributes-only
, keine Dateidaten zu kopieren, sondern nur Verzeichnis- und Dateistruktur.variable=$(cp -v ...)
erfasst die Standardausgabe von cp. Siehe gnu.org/software/bash/manual/html_node/Command-Substitution.htmAntworten:
Ich glaube nicht, dass GNU
cp
Ihnen helfen kann, wenn Sie sehen möchten, was es ohne Handeln tun würde. Wenn Sie die geänderten Dateien protokollieren möchten, können Sie die folgende-v
Option verwenden:Stattdessen
cp
können Sie rsync verwenden , das viel leistungsfähiger ist und fast überall installiert wird, außer bei eingebetteten Low-End-Systemen (und einfach zu installieren, wenn es standardmäßig nicht vorhanden ist).oder
quelle
Wenn Sie laufen wollten
cp foo*bar whatever
, dann laufen Sieecho foo*bar whatever
stattdessen.quelle
cp -u
und sucht nach einer Trockenlauf-ähnlichen Option für cp.Laut der Handbuchseite ,
Dies ist eine Funktion, die zwei Tests kombiniert, einen trivialen, der in einem Skript implementiert werden soll ( fehlt ) und einen, der einige Arbeit erfordert ( neuer ). Sie können ein Skript erstellen, das mit und meldet, was benötigt
comm
wird .diff
test
Keines der Standarddienstprogramme
cp
bietet die Möglichkeit, einen Kopiervorgang trocken auszuführen. Wie vorgeschlagen,rsync
ist dies der Weg, dies mit einem allgemein verfügbaren Dienstprogramm zu tun. Natürlichrsync
wird normalerweise zum Kopieren nach mehr Kriterien als nur neueren oder fehlenden Kriterien verwendet (Dateigröße und Zeitstempel werden ebenfalls verwendet). Aber es kann auf gerechtes Handeln reduziert werdencp -u
.Für nicht standardmäßige Dienstprogramme gibt es das
copy
Dienstprogramm, das ich Ende der 1980er Jahre geschrieben habe (und natürlich immer noch verwende). Es wurde wahrscheinlich vommake
Dienstprogramm inspiriert , da die erste Option, die ich hinzufügte, war-n
.Für das gegebene Beispiel würde es wie folgt verwendet:
Weiterführende Literatur:
Dienstprogramm zum Kopieren von Dateien / Verzeichnissen
Änderungsprotokolleintrag vom August 1988 :
quelle
Sie können den Befehl diff verwenden. Ich habe einen Job, der jeden Tag einige Sicherungsdateien kopiert. Einige Zeit muss ich überprüfen, ob alle Dateien kopiert wurden, hier ist die Syntax:
und natürlich, wenn Sie sie kopieren möchten, verwenden Sie:
quelle
Verwenden Sie stattdessen rsync. Rsync funktioniert perfekt auf lokalen Kopien und kann mit Sicherheit tun, was Sie wollen, sobald Sie die fünfzehn Millionen Optionen durchlaufen haben.
zeigt Ihnen alles, was getan werden würde, und
werde es tun.
quelle