Bash-скрипт сортировка последних файлов

Задача:

Скрипт должен принимать обязательный параметр <PATH_TO_DIR>

В директории PATH_TO_DIR выбирать 3 последних файла, по дате изменения, но не старше 7 дней.

Мой скрипт:

#!/bin/bash
dir=$1
last=`find $dir -type f -mtime -7`
mv $last /test

хочу переместить 3 последних файла в директорию /test как мне дополнить скрипт, чтобы была сортировка по трем последним файлам в параметре path_to_dir?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

find отыскивает все не старые файлы в директории и печатает их время и полный путь. sort сортирует строки по времени. head отбирает три самых свежих файла. cut убирает время из строк:

#!/bin/bash
last=`find $1 -maxdepth 1 -type f -mtime -7 -printf "%T@\t%p\n" | sort -nr | head -3 | cut -f "2-"`
mv $last /test

Форматная строка в printf:

%T@ - время обновления файла в виде вещественного числа в секундах;
\t  - табуляция (разделитель между временем и именем файла);
%p  - путь к файлу файла;
\n  - перевод строки.

Больше подробностей в man find.

→ Ссылка