Копировать файлы по дате
Как я могу скопировать файлы в папку, основываясь на том, когда файл последний раз редактировался? Допустим, я хочу скопировать все мои файлы, которые я последний раз редактировал сегодня из 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
команда. Для копирования нескольких файлов, смотрите это.