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