it-swarm.com.de

Kopieren der Dateien basierend auf dem Änderungsdatum in Linux

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 die Dateien mit dem folgenden Befehl auflisten.

find . -mtime -90 -ls

Ich weiß wirklich nicht, wie man die Dateien mit -mtime kopiert. Ich bin neu in Linux, bitte hilf mir.

16
Kalai

Verwenden Sie die -exec-Option für find:

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

-exec kopiert jedes von find zurückgegebene Ergebnis in das angegebene Verzeichnis (targetdir im obigen Beispiel).

28
devnull

Sie können auch das genaue Datum und die genaue Uhrzeit auswählen, anstatt zu einer bestimmten Anzahl von Tagen zurückzukehren

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

Oben kopiert alle Dateien in dem Verzeichnis, die nach dem 18. September 2016 um 20:05:00 Uhr erstellt wurden, in den Ordner (3 Monate vor heute :).

Seien Sie vorsichtig mit dem Symbol für den Suchbefehl. Es handelt sich NICHT um diesen Befehl: ' Es handelt sich um einen Backtick: ` Datumsauswahl ist wie folgt:'

Wenn Sie Dateien mit Leerzeichen, Zeilenumbrüchen, Tabulatoren oder Platzhaltern im Namen haben, können Sie eine der Lösungen von Stéphane Chazelas verwenden. Die erste ist für GNU, die zweite 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 {} +
4
FatihSarigol

Verwenden Sie diesen Befehl:

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

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 können die Liste, wenn sie nicht zu groß ist, mit lesen

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

Hinweis: Die Anführungszeichen um cat ... sind hintere Anführungszeichen, oft in der oberen linken Ecke der Tastatur

Sie können den Echo-Befehl dann durch einen Kopierbefehl ersetzen:

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

ZB: wähle 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
1