Próbuję napisać skrypt do pracy, aby zautomatyzować raportowanie danych wyjściowych. Pliki dziennika są (obecnie są „standaryzowane” w przyszłości) przechowywane w takiej strukturze ścieżki:
/<root_path>/<process_one_path>/logs/<time_date_stamp>/<specific_log_file>
/<root_path>/<process_two_path>/logs/<different_time_date_stamp>/<specific_log_file>
Każda część ścieżki jest znana z wyjątkiem znaczników daty i godziny, które zawsze są najnowsze w folderze.
Jeśli spróbuję użyć dzikiej karty zamiast znacznika daty, otrzymam wiele wyników, np .:
> ls /<root_path>/<process_two_path>/logs/* [tab]
20130102-175103
20130118-090859
20130305-213506
Chcę tylko, aby zwrócił najnowszą wersję, czy jest to możliwe dzięki Bash?
NB (nie mam zsh, i choć brzmi to tak uroczo, wątpię, czy kiedykolwiek dostaniemy to w pracy)
-1
). Zostało to dodane w bash 4.2. RHEL5 jest prawdopodobnie najstarszą dostępną dystrybucją głównego nurtu dla przedsiębiorstw i wykorzystuje bash 4.2.20.bash
have:"${list[@]: -1}"
like inksh93
([-1]
pochodzi zzsh
).3.2
. RHEL 3 i 4 nadal obsługiwane w ramach przedłużonej żywotności.POSIXly:
Ponieważ wspomniałeś
zsh
:źródło
Użyj bash glob w bash for loop. Lubię to:
Zależy to od tego, że bash dokonuje globalnej ekspansji posortowanej alfabetycznie. Przeczytaj instrukcję bash, aby uzyskać więcej informacji. Zauważ, że zależy to od LC_COLLATE . Zależy to również od faktu, że zmienna
filename
nadal zawiera ostatnią wartość po zakończeniu pętli.Jeśli chcesz mieć nazwę pliku z najstarszym znacznikiem czasu, możesz to zrobić w następujący sposób:
źródło
-1 jest wartością domyślną w potokach, a dane wyjściowe ls powinny być już posortowane:
Jeśli inni szukali sposobu interaktywnego wstawiania pierwszego lub ostatniego wyniku, możesz powiązać menu-complete lub menu-complete-backward w .inputrc:
Jeśli opcja „pokaż wszystko jeśli niejednoznaczne” jest włączona,
set completion-query-items 0
usuwa monit, gdy jest 101 lub więcej wyników iset page-completions off
wyłącza pager.źródło
Powinien załatwić sprawę.
źródło
ls
. Zawsze.