Wie kann ich Dateien in einen Ordner kopieren, der darauf basiert, wann die Datei zuletzt bearbeitet wurde? Nehmen wir an, ich möchte alle meine Dateien, die ich zuletzt heute bearbeitet von c: in meinen Ordner kopieren bak . Wie kann ich das erreichen?
Ich weiß, dass ein regulärer Kopierbefehl folgendermaßen ausgeführt werden kann:
cp source destination
z.B.
cp *.c bak
Irgendwelche Vorschläge?
Mit find werden die Dateien (und nur die Dateien), die am letzten Tag geändert wurden, wie folgt gefunden:
find . -type f -mtime 1
so können Sie sie mit kopieren
find . -type f -mtime 1 -exec cp {} bak/ \;
Bedeutung : Finde alle Entitäten im aktuellen Verzeichnis (.
) vom Typ "Datei" (-type f
), in mindestens einem Tag geändert = (-mtime 1
, aber es ist subtil, folgen Sie dem Link, um mehr zu erfahren), und führen Sie für jeden von ihnen den Befehl cp
aus, gefolgt vom Namen der Datei, die den vorherigen Bedingungen entspricht, und einem Literal bak/
--- In der exec
-Klausel wird der Befehl durch das schließende Semikolon (mit einem Escapezeichen versehen, damit die Shell ihn nicht isst) geschlossen. Außerdem bedeutet dies, dass der Befehl für jeden Treffer einmal ausgeführt werden muss.
Beachten Sie, dass der Verzeichnisbaum im Ordner bak/
abgeflacht wird. Daher ist es möglicherweise besser, ein Archivformat zu verwenden.
Dies ist beispielsweise mein Skript, das eine Sicherung aller Dateien in meinen Arbeitsverzeichnissen erstellt, die heute und seit zwei Tagen in TAR-Dateien geändert wurden, und diese dann in mein Dropbox-Verzeichnis verschiebt:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
es braucht zsh
, weil ich faul bin und nicht versucht habe, mich an die Array-Struktur von bash
anzupassen, aber das kann hier sicherlich jemand (Hinweis, Hinweis) ...
Sie können zunächst mit dem Befehl angeben, welche Datei Sie zuletzt in Ihrem aktuellen Ordner geändert haben
ls -lt
Oder Sie möchten angeben, auf welche Datei Sie zuletzt mit dem Befehl zugreifen
ls -ltu
Danach können Sie die Datei mit dem Befehl cp
kopieren. Informationen zum Kopieren mehrerer Dateien finden Sie unter this .