Dateien nach Datum kopieren

Dateien nach Datum kopieren

Wie kann ich Dateien in einem Ordner basierend auf dem Zeitpunkt der letzten Bearbeitung kopieren? Nehmen wir an, ich möchte alle meine Dateien kopieren, die ichzuletzt bearbeitet heuteausC:in meinen Ordnerzurück. Wie kann ich das erreichen?

Ich weiß, dass ein normaler Kopierbefehl wie folgt ausgeführt werden kann:

cp source destination

z.B.

cp *.c bak

Irgendwelche Vorschläge?

Antwort1

Mit „find“ lassen sich die Dateien (und nur die Dateien), die am letzten Tag geändert wurden, wie folgt finden:

find . -type f -mtime 1 

so dass Sie sie kopieren können mit

find . -type f -mtime 1  -exec cp {} bak/ \; 

Bedeutung: Suche nach allen Entitäten im aktuellen Verzeichnis ( .), vom Typ "Datei" ( -type f),geändert in mindestens 1 Tag ab jetzt( -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 aus, cpgefolgt vom Namen der Datei, die die vorherigen Bedingungen erfüllt, und von einem Literal bak/--- in der execKlausel. Das schließende Semikolon (maskiert, damit es nicht von der Shell gelesen wird) schließt den Befehl und bedeutet zusätzlich, dass der Befehl einmal für jede Übereinstimmung ausgeführt werden soll.

Beachten Sie, dass die Verzeichnisstruktur im bak/Ordner abgeflacht wird. Daher wäre die Verwendung eines Archivformats möglicherweise besser.

Dies ist beispielsweise mein Skript, das eine Sicherungskopie aller heute und seit zwei Tagen geänderten Dateien in meinen Arbeitsverzeichnissen in TAR-Dateien erstellt 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 ist nötig zsh, weil ich faul bin und nicht versucht habe, es an die Array-Struktur von anzupassen bash, aber das kann hier sicherlich jemand tun (kleiner Hinweis) …

Antwort2

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 zugegriffen haben

ls -ltu

Anschließend können Sie die Datei mit cpdem Befehl kopieren. Informationen zum Kopieren mehrerer Dateien finden Sie unterDas.

verwandte Informationen