2013-08-12 5 views
12

Es kann eine doppelte Frage sein, aber ich konnte die Lösung dafür nicht finden Ich möchte die letzten 3 Monate Dateien von einem Verzeichnis in ein anderes Verzeichnis kopieren, aber ich konnte nur finden, die aufzulisten Dateien mit dem folgenden Befehl.Kopieren der Dateien basierend auf Änderungsdatum in Linux

find . -mtime -90 -ls 

Ich weiß wirklich nicht, wie die Dateien kopieren von -mtime verwenden. Ich bin neu in Linux, bitte hilf mir.

Antwort

18

Verwenden Sie die Option -exec für find:

find . -mtime -90 -exec cp {} targetdir \; 

-exec würde durch find in das angegebene Verzeichnis (targetdir in dem obigen Beispiel) jedes zurückgegebene Ergebnis kopieren.

2

Ich denke, ich würde zuerst die Liste der Dateien vorübergehend speichern und eine Schleife verwenden.

find . -mtime -90 -ls >/tmp/copy.todo.txt 

Sie die Liste lesen können, wenn sie nicht zu groß ist, mit

for f in `cat /tmp/copy.todo.txt`; 
do echo $f; 
done 

Hinweis: die Anführungszeichen Katze ... sind einfachen Anführungszeichen, die oft in der oberen linken Ecke der Tastatur

anschließend können Sie den Echo-Befehl mit einem Kopierbefehl ersetzen:

for f in `cat /tmp/copy.todo.txt`; 
do cp $f /some/directory/ 
done 
+0

auf meiner Tastatur Backticks nach rechts oben befinden. Neben dem Fragezeichen. (Europäische/nordische Tastatur) – f2lollpll

3

Verwenden Sie diesen Befehl:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done 
3

One auch das genaue Datum und Zeit außer geht zurück auf bestimmte Anzahl von Tagen

cp `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER 

Above kopiert alle Dateien in dem Verzeichnis auswählen können, waren erstellt nach 18 September 2016 20:05:00 an den ORDNER (3 Monate vor heute :)

Seien Sie vorsichtig mit dem Symbol für den Suchbefehl, es ist NICHT dieser: ' es ist dies ein Graviszeichen: ` Datum Auswahl dabei ist:"

Wenn Sie Dateien mit Leerzeichen, Zeilenumbrüche, Tabulatoren oder Platzhalter in ihren Namen haben, können Sie eine der beiden Lösungen von Stéphane Chazelas verwenden können, erste ist, für GNU, ist an zweiter Stelle für GNU oder einige BSDs:

find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "[email protected]" FOLDER' sh {} + 
1

Ex: select Tag 09/08/2017

ls -l 
-rw-rw-rw- 1 root  system   943 Aug 09 02:59 File 

for j in `ls -l |awk '{ if ($7 == "09") print $9}'` 
    do 
     mv $j $Destination; 
    done 
Verwandte Themen