Копировать файлы по дате

Как я могу скопировать файлы в папку, основываясь на том, когда файл последний раз редактировался? Допустим, я хочу скопировать все мои файлы, которые я последний раз редактировал сегодня из c: в мою папку bak. Как я могу этого достичь?

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

cp source destination

например.

cp *.c bak

Какие-либо предложения?

2 ответа

Решение

Используя find, файлы (и только файлы), измененные в последний день, находят:

find . -type f -mtime 1 

так что вы можете скопировать их с

find . -type f -mtime 1  -exec cp {} bak/ \; 

Значение: найти все объекты в текущем каталоге (.), типа "файл" (-type f), изменено как минимум через 1 день (-mtime 1, но это не сложно, перейдите по ссылке, чтобы узнать больше), и для каждого из них выполните команду cp сопровождаемый именем файла, который соответствует предыдущим условиям и литералом bak/ --- в exec предложение, закрывающая точка с запятой (экранированная, чтобы избежать ее потребления оболочкой) закрывает команду и дополнительно означает, что команда должна выполняться один раз для каждого совпадения.

Обратите внимание, что дерево каталогов будет сглажено в bak/ папку, так что, возможно, лучше использовать формат архива.

Например, это мой сценарий, который создает резервную копию всех файлов в моих рабочих каталогах, измененных сегодня и с двух дней в tar-файлах, а затем перемещает их в мой каталог Dropbox:

#! /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

это нужно zsh потому что я ленивый и не пытался приспособиться к структуре массива bashно, конечно, кто-то здесь может это сделать (подсказка, подсказка)...

Сначала вы можете указать, какой файл вы в последний раз модифицировали в текущей папке, с помощью команды

ls -lt

Или вы хотите указать, к какому файлу вы обращаетесь последним, с помощью команды

ls -ltu

После этого вы можете скопировать файл с cp команда. Для копирования нескольких файлов, смотрите это.

Другие вопросы по тегам