1

Я использую SUSE Linux Enterprise Server 11 (x86_64)
Мне нужно найти самый старый файл папки и распечатать его в unixtime. Я сделал работу с этим одним вкладышем:
find $1 -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1
($ 1 для Zabbix)

Но когда папка становится пустой, значение также кажется пустым, и мое программное обеспечение для мониторинга, Zabbix, не может обрабатывать пустые значения, поэтому мне нужно, например, распечатать номер 0, если папка пуста.

Хорошо, теперь я написал этот прекрасный сценарий, но, как вы все видите, он довольно дерьмовый. Так кто-нибудь может мне помочь с этим?
FYI. Я начал возиться с Linux два дня назад, поэтому, пожалуйста, потерпите меня:P

#!/bin/bash    
export fileage
fileage=$(find -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1)
if [ $? -eq 0 ]
then
   echo "0"  
else
   echo "fileage"
fi

1 ответ1

2

find может распечатать любую из 3 временных меток, которые может иметь файл / каталог. Вам просто нужно использовать -printf с соответствующей последовательностью форматирования: % C @ или % A @ или % T @ (подробности см. В man find).

Что касается пустых каталогов, проверка $? 0 может вводить в заблуждение, поскольку код возврата 0 означает "ничего плохого не произошло", а пустой каталог не считается «чем-то плохим», это просто особый, но нормальный случай. Но вы можете сохранить ВЫХОД команды find (и следующие команды в конвейере) и проверить, является ли он пустым или нет.

подобно

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
if [ -z "fileage" ]; then
  echo 0
else
  echo $fileage
fi

или, если вы хотите быть коротким:

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
echo ${fileage:=0}

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .