2013-08-12 11 views
12

To może być duplikat pytania, ale nie mogłem znaleźć rozwiązania tego, chcę skopiować ostatnie 3 miesiące plików z jednego katalogu do innego katalogu, ale mogłem znaleźć tylko na liście pliki za pomocą następującego polecenia.Kopiowanie plików na podstawie daty modyfikacji w linux

find . -mtime -90 -ls 

Naprawdę nie wiem, jak skopiować pliki za pomocą -mtime. Jestem nowy w Linuksie, pomóż mi.

Odpowiedz

18

Użyj opcji -exec dla find:

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

-exec byłoby skopiować każdy wynik zwracany przez find do określonego katalogu (targetdir w powyższym przykładzie).

2

Domyślam się, że najpierw przechowuję listę plików tymczasowo i używam pętli.

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

można odczytać listy, jeśli nie jest zbyt duży, z

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

Uwaga: w cudzysłowie kota ... są małe cudzysłowy, często w górnym lewym rogu klawiatury

następnie można zastąpić polecenia echo z polecenia kopiowania:

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

na moich backticks klawiatury znajdują się w prawym górnym rogu. Obok znaku zapytania. (Klawiatura europejska/nordycka) – f2lollpll

3

użyj polecenia:

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

Można również wybrać dokładną datę i czas inny niż powrót do pewnej ilości dni

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

Wyżej kopiuje wszystkie pliki w katalogu, które były utworzone po 18 września 2016 20:05:00 do FOLDERA (3 miesiące przed dzisiejszym czasem)

Uważaj na symbol polecenia find, NIE jest to: " to tego, lewy apostrof: ` wybór daty jest z tym:"

Jeśli masz plików ze spacjami, znakami nowej linii, kart lub symboli wieloznacznych w ich nazwy, można skorzystać z jednego z rozwiązań z Stéphane Chazelas, najpierw jest dla GNU, drugi jest dla GNU lub niektórych BSD:

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: wybierz dzień 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