La combinazione di find
e ls
funziona bene per
- nomi di file senza newline
- quantità non molto grande di file
- nomi di file non molto lunghi
La soluzione:
find . -name "my-pattern" -print0 |
xargs -r -0 ls -1 -t |
head -1
Analizziamolo:
Con find
possiamo abbinare tutti i file interessanti come questo:
find . -name "my-pattern" ...
quindi utilizzando -print0
possiamo passare tutti i nomi di file in modo sicuro a ls
questo:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
find
qui è possibile aggiungere ulteriori parametri e modelli di ricerca
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -t
ordina i file in base al tempo di modifica (prima il più recente) e li stampa uno alla volta. È possibile utilizzare -c
per ordinare in base al momento della creazione. Nota : questo si interromperà con i nomi di file contenenti newline.
Finalmente head -1
ci ottiene il primo file nell'elenco ordinato.
Nota: xargs
utilizzare i limiti di sistema per la dimensione dell'elenco degli argomenti. Se questa dimensione supera, xargs
chiamerà ls
più volte. Ciò interromperà l'ordinamento e probabilmente anche l'output finale. Correre
xargs --show-limits
per controllare i limiti del tuo sistema.
Nota 2: utilizzare find . -maxdepth 1 -name "my-pattern" -print0
se non si desidera cercare file nelle sottocartelle.
Nota 3: Come sottolineato da @starfry - l' -r
argomento per xargs
sta impedendo la chiamata di ls -1 -t
, se nessun file è stato trovato da find
. Grazie per il suggerimento.