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

Не нужно использовать grep (возможно, из-за проблем с производительностью на огромной информации, но я не думаю, что это относится к данным, хранящимся в переменной)

BMC="$(echo "${allnow}" | sed -e '/iBMC=[0-9]/!d' -e 's/iBMC=//;q' )"
-1
30.11.2018, 14:34
4 ответа

Итак, вы хотите получить последний измененный файл с определенным шаблоном именования. Следующие команды должны работать для вас:

[haxiel@testvm1 ~]$ ls -1t file_test_hadoop* | head -n1
file_test_hadoop_20181130.csv

[haxiel@testvm1 ~]$ ls -1t file_test_hub* | head -n1
file_test_hub_20181130.txt
0
28.01.2020, 05:12

Пробовал с помощью приведенной ниже команды, все работает нормально

ls -ltrh /home/test/file_test_hadoop*| tail -n1
ls -ltrh /home/test/file_test_hub* | tail -n1
0
28.01.2020, 05:12

Вместо того, чтобы пытаться разбирать ls или передавать ls для поиска и вывода, просто используйте массивы bash, подстановку оболочки и естественный порядок сортировки ГГГГММДД:

cd /home/test
hadoop_files=(file_test_hadoop*)
HADOOP_NAME=${hadoop_files[-1]}
unset hadoop_files
hub_files=(file_test_hub*)
HUB_NAME=${hub_files[-1]}
unset hub_files
cd -

Это заполняет переменные временного массива списком имен файлов, соответствующих различным шаблонам. Вы хотели бы добавить проверку ошибок -для ситуаций, когда файлов вообще нет или файлов с неожиданным шаблоном (файл _тест _hadoop9, например ).

0
28.01.2020, 05:12

Ваша первая команда

ls -tr 

, правильно перечисляет файлы по времени

Когда вы передаете это на

tail -n1

Правильно выбирает последнюю запись, самый последний файл

Проблема в том, что он может совпадать или не совпадать с вашим шаблоном файла

Конечно, ваша последняя команда просто не получает никакого ввода от предыдущих. и поэтому он работает просто так, как должен, и перечисляет все файлы

find /home/test -maxdepth 1 -name "file_test_hadoop*" -printf '%f\n'

Чтобы решить эту проблему, я бы сначала начал с lsи grep, чтобы соответствовать правильному шаблону, то есть

ls -tr | grep "file_test_hadoop" > File_List.txt

Это создаст файл со списком и самым последним файлом в самом низу,

tail -n1 File_List.txt

Таким образом, ваш код будетHADOOP_NAME="$(tail -n1 File_List.txt)"

0
28.01.2020, 05:12

Теги

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