Как я могу копировать файлы в папку, основываясь на том, когда файл последний раз редактировался? Допустим, я хочу скопировать все мои файлы, которые я последний раз редактировал сегодня из c: , в мою папку bak . Как мне этого добиться?
Я знаю, что обычная команда копирования может быть выполнена следующим образом:
cp source destination
например.
cp *.c bak
Есть предложения?
Используя находку, файлы (и только файлы) измененный в прошлый день найдены:
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
команда. Для копирования нескольких файлов см. это .