Linux Bash: Verschieben/Kopieren von Dateien/Verzeichnissen nach Zeitstempel

Linux Bash: Verschieben/Kopieren von Dateien/Verzeichnissen nach Zeitstempel

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, cpscheint 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, cpscheint 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 findund 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 aminist die Verwendung von etwas verwirrend, da -amin -120es bedeutet „die Datei wurdeaufgerufenin den letzten 120 Minuten.“ Wenn Sie auf dieSchaffungZeit der Dateien, yhat sollte stattdessen geändert werden in cmin—aka: geändert nvor Minuten—; weitere Details im LinuxfindManpage.

Der endgültige Befehl wäre also:

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

Aber bevor Sie diesen cpBefehl ausführen, sollten Sie immer einen „Trockenlauf“ durchführen, echoum 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.

verwandte Informationen