webentwicklung-frage-antwort-db.com.de

Dateien nach Datum kopieren

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?

3
John

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) ...

5
Rmano

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 .

0
adadion