Estou tentando escrever um script para o trabalho para automatizar alguns relatórios em uma saída. Os arquivos de log são (atualmente, estão sendo 'padronizados' no futuro) armazenados neste tipo de estrutura de caminho:
/<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>
Todas as partes do caminho são conhecidas, exceto os carimbos de data e hora, que são sempre os mais recentes na pasta.
Se eu tentar usar um curinga no lugar do carimbo de data e hora, obtenho vários resultados, por exemplo:
> ls /<root_path>/<process_two_path>/logs/* [tab]
20130102-175103
20130118-090859
20130305-213506
Eu só quero que ele retorne o mais recente, isso é possível com o Bash?
NB (eu não tenho zsh, e por mais adorável que pareça, duvido que possamos fazê-lo funcionar)
-1
). Isso foi adicionado no bash 4.2. O RHEL5 é provavelmente a distribuição corporativa mainstream suportada mais antiga disponível e usa o bash 4.2.20.bash
have:"${list[@]: -1}"
like inksh93
([-1]
vem dezsh
).3.2
. RHEL 3 e 4 ainda suportado por vida útil prolongada.POSIXly:
Desde que você mencionou
zsh
:fonte
Use o bash glob em um loop for do bash. Como isso:
Isso depende do fato de que o bash faz a expansão glob classificada em ordem alfabética. Leia o manual do bash para mais informações. Observe que isso depende de LC_COLLATE . Isso também depende do fato de que a variável
filename
ainda contém o último valor após o encerramento do loop.Se você quiser o nome do arquivo com o carimbo de data / hora mais antigo, faça o seguinte:
fonte
-1 é o padrão nos pipelines e a saída ls já deve estar classificada:
Se outras pessoas procuravam como inserir o primeiro ou o último resultado interativamente, você pode vincular menu completo ou menu completo para trás em .inputrc:
Se show-all-if-ambiguous estiver ativado,
set completion-query-items 0
o prompt será removido quando houver 101 ou mais resultados eset page-completions off
desabilitado o pager.fonte
Deve fazer o truque.
fonte
ls
. Sempre.