Se o seu shell é um shell parecido com o Bourne e seu [
incorporado implementa o teste -nt
para testar se um arquivo é mais novo que outro, você pode usar
newest=
for file in ./* ./.*; do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf 'The latest file is "%s"\n' "$newest"
else
echo 'Could not find files here' >&2
exit 1
fi
Isso iteraria todos os arquivos regulares (e links simbólicos para regular) (incluindo os ocultos) no diretório atual e, em seguida, informaria qual deles foi considerado o arquivo mais novo. Você substituiria a instrução printf
pelo comando real que você deseja executar em "$newest"
.
Como uma função shell, que adicionalmente recebe uma lista de arquivos como argumento:
newest () (
newest=
for file do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf '%s\n' "$newest"
else
echo 'No files found' >&2
return 1
fi
)
Então
tail -f "$(newest ./filename*)"