Я некоторое время искал способ заархивировать наш файловый сервер, но не нашел рабочего решения. Цель состоит в том, чтобы найти в каталоге и его подкаталогах файлы, не измененные за последние x дней. Если в родительском каталоге или его подкаталогах нет файлов, следует заархивировать весь родительский каталог (или, по крайней мере, вывести его на экран). Любые предложения приветствуются! Привет, Джон

1
John 21 Июн 2018 в 10:39
Есть ли причина, по которой вы не используете существующее решение для резервного копирования, такое как borgbackup или подобное?
 – 
Kusalananda
19 Июн 2018 в 11:42
Цель состоит в том, чтобы переместить родительский каталог в хранилище nfs, чтобы мы могли очистить дисковое пространство на сервере. С решениями для резервного копирования, которые мы используем (например, rsnapshot), это не вариант.
 – 
John
19 Июн 2018 в 11:55

1 ответ

Простой ответ — использовать аргумент «новее» команды find, который находит любые файлы новее, чем другой файл. Поскольку то, что мы хотим, на самом деле является обратным, нам понадобится сценарий, который подсчитывает файлы, которые были изменены (т. е. новее), и печатает имя каталога, если НИ ОДИН не найден.

DATE=`date -d "-30 days"` #Calculate a date 30 days before today
touch -d "$DATE" /tmp/newer #Create a temp file with the calculated date

#Assume we're passing in a list of directories
#We could just as easily find any directory below a certain point without
#newer files by setting DIR=`find /what/ever/directory -type d`

for DIR in $* 
do
    MOD=`find "$DIR" -newer /tmp/newer | wc -l` #Count the number of newer files
    if [ "$MOD" -eq 0 ] 
    then
        echo $DIR   # Nothing new in 30 days - Print the name of the Dir
    fi
done
0
wineguy 25 Июн 2018 в 06:57