Получите новейший файл с года/месяца/даты/времени структуры каталогов

Поместить MAILTO=root в /etc/default/cron. Этот файл содержит настройки по умолчанию крона.

man 5 crontab говорит,

Если MAILTO определяется (и непустой), почта отправляется пользователю, так названному.

Относитесь: http://man.cx/cron (1) #heading4

3
09.11.2012, 00:45
5 ответов
find 'basics_mini' -type f | 
sed 's/.*basics_mini\///' |
sort -t '/' -k1nr -k2nr -k3nr -k4nr |
head -1

Это найдет файлы в Вашем резервном каталоге, затем sed разделит ведущий путь (вплоть до Вашего year dir). Затем вид разделит путь на '/' и выполнит числовой вид на поле 1, 2, 3 и 4, т.е. год, месяц, день и время. Наконец, head -1 возвратит верхнюю строку вывода.

Конечно, это только возвратит 1 файл, даже если было несколько идентичных новейших записей (если это - беспокойство о Вас).

2
27.01.2020, 21:11
  • 1
    Работы безупречно. Большое объяснение.Спасибо. PS один файл достаточно хорош, потому что в основном невозможно иметь два резервных копий, созданные одновременно (второй мудрый) –  Radek 09.11.2012, 02:26
  • 2
    я не вижу преимущества удаления ведущего пути с sed, ни путем разделения полей в виде, ни путем сортировки численно. тем не менее, я изучил, как использовать вид с различными полями. –  miracle173 11.11.2012, 10:02
  • 3
    @miracle173 на преимущество, являющееся этим, это работает в большем количестве случаев, чем необработанный вид входа был бы. –  tojrobinson 12.11.2012, 01:54

находка должна удовлетворить Вашим потребностям:

find "/path/to/backup_dir" -type f|sort -r|head -n1

Это только работает, если Вы имеете (как в Вашем примере), продвижение обнуляет на Ваших папках месяца и дня

Если Вы хотите резервное копирование с определенным именем файла (или шаблон) добавляют шаблон имени к параметрам находки, например.

find "/path/to/backup_dir" -type f -name "*db2inst1*"|sort -r|head -n1

... или используйте -iname для нечувствительных к регистру шаблонов

Теперь к деталям вышеупомянутых команд:

  • find "/path" рекурсивно перечисляют все файлы/директора в данном пути (если Вы не используете дальнейшую фильтрацию:
  • -type f параметр находки отфильтровывает все, что это не регулярный файл),
  • -name или -iname файлы соответствия согласно определенному шаблону
  • sort сортирует вывод в обратном порядке (-r)
  • head -n1 только печатает первую строку (-n 1) из его входа и сразу выходит после выполнения этого.
4
27.01.2020, 21:11
  • 1
    Кто-то downvoted этот ответ. Почему Вы не можете сказать почему? –  Radek 09.11.2012, 01:52
  • 2
    Это не отсортирует файлы, как предназначено. Числовой вид не произведен ни в какой точке, уже не говоря о для каждого поля, по которому Вы хотите отсортировать, т.е. Вы получите файл с месяцем 3 являющийся более новым, чем один с месяцем 10. –  tojrobinson 09.11.2012, 02:25
  • 3
    Вы правы... @tojrobinson. Но примеры в исходном вопросе у всех есть начальные нули в течение месяцев/дни. Таким образом, это только станет проблемой в году 10000 (как в Вашем последнем примере) –  mreithub 09.11.2012, 02:34
  • 4
    Проблема произойдет в октябре в следующем году :-) –  Radek 09.11.2012, 03:07
  • 5
    @Radek: нет, не в октябре в следующем году, в году 10000. –  miracle173 11.11.2012, 11:17

С этой схемой именования новое резервное копирование находится в последнем подкаталоге в лексикографическом порядке. Можно получить новый каталог непосредственно в оболочке, использовав в своих интересах то, что подстановочные знаки расширены в лексикографическом порядке.

cd basics_mini
set [0-9][0-9][0-9][0-9]/*/*/*
shift $(($#-1))
echo "The most recent backup is in $1"

В zsh можно непосредственно получить последний каталог со спецификатором шарика.

echo "The most recent backup is in" basics_mini/[0-9][0-9][0-9][0-9]/*/*/*([-1])
2
27.01.2020, 21:11

Мое решение состояло бы в том, чтобы использовать это. Это произведет новейший возможный файл:

ls -lcR --full-time | grep '^-' | sort -k 6 -r | head -n 1

Объяснение:

ls -lcR

-l используйте длинный формат списка

-c покажите ctime (время последнего изменения информации о статусе файла)

-R подкаталоги списка рекурсивно

grep для файлов, запускающихся с a - (тире), означая 'регулярные файлы'.

sort -k 6 -r

-k Вид столбцом n (6, поскольку это содержит поле даты),

-r Обратный

head -n1

-n количество строк для отображения (от вершины вниз. 1)

1
27.01.2020, 21:11
  • 1
    , который у меня нет времени для попытки больше. Но Ваш код не работает. Я пытался для не 'инвертирования' вида, и это смотрело хорошо. –  Radek 09.11.2012, 02:29
  • 2
    , в который я переместил-r после-k в виде в моем ответе. Теперь это работает. мой отказ. Измененный команда без тестирования. глупый я. –  delh 09.11.2012, 02:36
  • 3
    я думаю -r не необходимо вообще. –  Radek 09.11.2012, 03:06
find -maxdepth 1 -type ['d' for directory or 'f'for file] | ls -t | head -1 .. 

Это должно сработать.

-1
27.01.2020, 21:11

Теги

Похожие вопросы