Linux bash скрипт для самого старого файла в папке + возвращаемое значение, если папка пуста

474
knob

Я использую 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
Gombai Sándor

find can print any of the 3 timestamps a file/directory can have. You just have to use -printf with the appropriate format sequence: %C@ or %A@ or %T@ (see the detail is man find).

As for empty directories, checking if $? is 0 can be misleading because 0 return code means "nothing bad has happened", and an empty directory does not count "something bad", it's just a special but normal case. But you can store the OUTPUT of find (and the following commands in the pipe) and check if it is empty or not.

Like

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

or, if you like to be short:

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

Nevertheless, be careful if you really want to see "oldest file" because that would mean reading the creation time of the file and that is not stored. You could have the oldest file with the newest of all the three timestamps.

Приветствую вас за помощь! Теперь у меня другая проблема. У меня есть скрипт в папке /home/logia/zabbix/script/ficycle.bash. Я дал ему права на выполнение с помощью chmod + x, и когда я запускаю скрипт, написав /home/logia/zabbix/script/ficycle.bash, он выдаёт мне ошибку "-bash: /home/logia/zabbix/script/ficycle.bash : / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога ", и я передал файл в формате ASCII. Любые советы? knob 7 лет назад 0
Ваш файл скрипта в формате DOS, строки заканчиваются символами 0xOD 0x0A, а не только 0x0A. Вы можете помочь в этом, используя sed (требует некоторого опыта), другие инструменты оболочки или ваш редактор, если он имеет функцию настройки завершения строки. Я могу рассказать вам, как это сделать с помощью vi. Введите все как написано (без цифр) 1) скрипт vi 2): set fileformat = dos 3): wq Gombai Sándor 7 лет назад 0
Спасибо тебе, братан, теперь это работает! Смена опции преобразования EOL из notepad ++ сделала свое дело knob 7 лет назад 0

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