Копирование файлов на основе даты модификации в Linux

Это может быть дублированный вопрос, но я не мог найти решение для этого. Я хочу скопировать последние 3 месяца файлы из одного каталога в другой каталог, но я могу найти только список файлов, используя следующую команду.

find . -mtime -90 -ls

Я действительно не знаю, как копировать файлы с помощью -mtime. Я новичок в Linux, помогите мне.

Ответ 1

Используйте параметр -exec для find:

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

-exec копирует каждый результат, возвращаемый find в указанный каталог (targetdir в приведенном выше примере).

Ответ 2

Используйте эту команду:

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

Ответ 3

Можно также выбрать точную дату и время, кроме возврата к определенному количеству дней.

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

Выше копии всех файлов в каталоге, созданных после 18 сентября 2016 года 20:05:00, к ПАДЕНИТЕ (за 3 месяца до сегодняшнего дня:)

Будьте осторожны с символом команды find, это НЕ это: это так, backtick: ` выбор даты с этим: '

Если у вас есть файлы с пробелами, новыми символами, вкладками или подстановочными знаками в их именах, вы можете использовать любое из решений Stéphane Chazelas, сначала для GNU, второе для GNU или некоторых 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 {} +

Ответ 4

Я предполагаю, что я бы сначала сохранил список файлов и использовал цикл.

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

Вы можете прочитать список, если он не слишком большой, с

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

Примечание: кавычки вокруг cat... являются backquotes, часто в верхнем левом углу клавиатуры

Затем вы можете заменить команду echo командой copy:

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

Ответ 5

Пример: выберите день 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