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

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

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

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

cp source destination

например.

cp *.c bak

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

решение1

Используя 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, но наверняка кто-то здесь сможет это сделать (подсказка, подсказка)...

решение2

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

ls -lt

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

ls -ltu

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

Связанный контент