Linux bash скрипт для самого старого файла в папке + возвращаемое значение, если папка пуста
Я использую 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 ответ
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}
Тем не менее, будьте осторожны, если вы действительно хотите увидеть "самый старый файл", потому что это будет означать чтение времени создания файла, а это не сохраняется. У вас может быть самый старый файл с самой новой из всех трех временных меток.