У меня есть папка с резервными копиями от базы данных MySQL, которые создаются автоматически. Их имя состоит из даты, как которая резервное копирование было сделано, так:
2010-06-12_19-45-05.mysql.gz
2010-06-14_19-45-05.mysql.gz
2010-06-18_19-45-05.mysql.gz
2010-07-01_19-45-05.mysql.gz
Что путь состоит в том, чтобы получить имя файла последнего файла в списке, т.е. того, который в алфавитном порядке является последним?
В сценарии оболочки я хотел бы сделать что-то как
LAST_BACKUP_FILE= ???
gunzip $LAST_BACKUP_FILE;
ls -1 | tail -n 1
Если вы хотите присвоить это переменной, используйте $ (...)
или обратные кавычки.
FILE=`ls -1 | tail -n 1`
FILE=$(ls -1 | tail -n 1)
Ответ @Sjoerd правильный, я просто выберу из него несколько нит:
вам не нужна опция -1
для принудительного использования одного пути на строка, если вы направите вывод куда-нибудь:
ls | хвост -n 1
вы можете использовать -r
, чтобы получить листинг в обратном порядке, и взять первый:
ls -r | голова -n 1
gunzip some.log.gz
запишет несжатые данные в some.log
и удалит some.log.gz
, что может быть или не быть тем, что вы хотите ( вероятно, нет). если вы хотите сохранить сжатый исходный код, перенаправьте его в gunzip
:
gunzip
вы можете захотеть защитить скрипт от ситуации, когда каталог не содержит файлов, поскольку
gunzip $ empty_variable
расширяется до
gunzip
, и такой вызов будет бесконечно ждать данных на стандартном вводе:
latest="$(ls -r /some/where/*.gz | head -1)"
if test -z "$latest"; then
# there's no logs yet, bail out
exit
fi
gunzip < $latest