
Dies ist der Befehl, den ich verwende:
find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;
Ich versuche, viele Verzeichnisse von einem Verzeichnis in ein anderes Verzeichnis zu kopieren, aber nur die in den letzten 2 Stunden erstellten.
Mein Befehl funktioniert jedoch nicht und ich verstehe nicht wirklich, warum. Wenn es nicht offensichtlich ist, bin ich kein sehr erfahrener Linux-Benutzer. Soweit ich es verstehe, cp
scheint mein beabsichtigtes Ziel als Quelle zu interpretieren.
Ich habe sogar versucht, es zu verwenden xargs
, und ich verstehe noch weniger.
Verwenden von Bash in Debian Squeezy und Ausführen des Befehls im Root-Zugriff.
Antwort1
Soweit ich es verstehe,
cp
scheint mein beabsichtigtes Ziel die Quelle zu sein.
Ja, das ist es. Die allgemeine Linux/Unix-Syntax sieht nämlich ungefähr so aus:
[some command] [some command options] [source item] [destination item]
Schauen Sie sich also Ihren Befehl an:
find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;
Das cp -f absolute-destination {}
ist falsch, da dies {}
die vom Befehl gefundene Quelldatei darstellt find
und das „absolute Ziel“ genau das ist, was es ist: ein Ziel. Daher sollte dieser Teil des Befehls wie folgt umgeschrieben werden cp -f {} absolute-destination
:
Zusätzlich:
- Dies
-name "*"
ist redundant und überflüssig, wenn Sie ohnehin alle Dateien zeitbasiert suchen, d. h. Sie können es einfach weglassen. - Außerdem
amin
ist die Verwendung von etwas verwirrend, da-amin -120
es bedeutet „die Datei wurdeaufgerufenin den letzten 120 Minuten.“ Wenn Sie auf dieSchaffungZeit der Dateien, yhat sollte stattdessen geändert werden incmin
—aka: geändertn
vor Minuten—; weitere Details im Linuxfind
Manpage.
Der endgültige Befehl wäre also:
find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;
Aber bevor Sie diesen cp
Befehl ausführen, sollten Sie immer einen „Trockenlauf“ durchführen, echo
um genau zu sehen, was passiert, und zwar wie folgt:
find absolute-path -cmin -120 -exec echo {} \;
Denken Sie daran, einen Testlauf eines Befehls wie diesen durchzuführenVorDas Ausführen des tatsächlichen/letzten Befehls erspart Ihnen auf lange Sicht Kopfschmerzen. Insbesondere, wenn Sie vorhaben, den Befehl als auszuführen root
.
Man weiß nie, ob man nicht einen einfachen, unbeabsichtigten Fehler in der Befehlslogik gemacht hat, der unerwartete Folgen haben könnte. Und wenn man einen fehlerhaft strukturierten Befehl ohne Tests in die „Produktion“ schickt, spart man vielleicht am Anfang ein paar Minuten, aber dann kann die Bereinigung Stunden – und in manchen Fällen Tage – dauern.StetsGehen Sie auf Nummer sicher, wenn Sie in der Befehlszeile arbeiten.