найти последний файл с датой и датой и использовать sed

У меня есть серия файлов, содержащих дату, и мне нужно получить файл с последней датой, а также последнюю модификацию даты и передать ее в sed. Я пробовал разные подходы, и, похоже, я не могу получить тот, который работает.

например:

find . -iname '*2014-09-20*' -type f -exec ls -lrt {} \; -exec tail -1 {} \; -exec sed -n -e '/some test/,/some other text/p' {} \; find . -iname '*2014-09-20*' -type f | xargs ls -lrt | tail -1 | sed -n -e '/some text/,/some other text/p' 

файлы журналов выглядят примерно так

 -rw-r--r--. 1 root root 23042 Sep 18 14:21 logfilename_2014-09-19_20140918141909.log -rw-r--r--. 1 root root 2343 Sep 18 14:22 logfilename_2014-09-20_20140918142142.log -rw-r--r--. 1 root root 2343 Sep 18 14:23 logfilename_2014-09-21_20140918142245.log -rw-r--r--. 1 root root 2343 Sep 19 10:11 logfilename_2014-09-20_20140919101031.log -rw-r--r--. 1 root root 2343 Sep 19 10:12 logfilename_2014-09-21_20140919101122.log -rw-r--r--. 1 root root 2343 Sep 19 10:13 logfilename_2014-09-22_20140919101218.log 

Я ожидаю, что результат будет таким:

 TEXT 1 line line line line TEXT 2 

который работает, когда я это делаю:

 sed -n -e '/TEXT 1/,/TEXT 2/p' logfilename_2014-09-20_20140919101031.log 

но когда я передаю результаты sed из вышеупомянутых cmds, я не получаю никаких результатов. Это то, что я пробовал до сих пор:

 find . -iname '*2014-09-19*' -type f | xargs stat --format '%Y : %y %n' | sort -nr | cut -d: -f2- | head -1 | sed -n -e '/TEXT 1/,/TEXT 2/p' find . -iname '*2014-09-19*' -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}' | tail -1 | sed -n -e '/TEXT 1/,/TEXT 2/p' 

2 Solutions collect form web for “найти последний файл с датой и датой и использовать sed”

Самый простой подход (но который терпит неудачу, если ваши файлы содержат пробелы или символы новой строки или другие странные символы)

 ls -ltr '*2014-09-20*' | tail -n 1 

Более безопасный способ

 find . -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}' 

Если вам нужно использовать файл с самым последним временем модификации, самый простой способ – использовать zsh вместо какой-либо другой оболочки и использовать его квалификаторы glob om для сортировки совпадений по времени модификации и [1] чтобы сохранить только первое совпадение.

 echo *2014-09-20*(om[1]) 

Если вы хотите, чтобы последняя временная метка была основана на временной отметке в имени файла, тогда обычная сортировка будет выполнена. На последнем аргументе действует следующая функция:

 act_on_last_file () { eval 'set -- "${'"$#"'}"' echo "$1" } act_on_last_file *2014-09-20* 
  • Слияние двух файлов с разницей
  • добавить новую строку в файл с разделителями
  • Как создать сценарий переключения вывода xrandr?
  • Сценарий мониторинга хоста с меткой времени
  • Как сравнить два числа
  • Выполнить команду перед выключением
  • использование файла lockfile в скрипте и его значение
  • Как проверить, существует ли несколько файлов?
  • Как вставить строки из одного файла в другой файл с помощью команд оболочки?
  • Почему команда jobs не работает в сценарии оболочки?
  • Проверьте, есть ли файлы, соответствующие шаблону, чтобы выполнить скрипт
  • Linux и Unix - лучшая ОС в мире.