He visto muchas preguntas y respuestas aquí usando una construcción en la línea de
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
o
ls -t | while read i; do
Ahora, sé que no deberías usar ls en scripts porque se rompe fácilmente; pero no puedo encontrar una mejor manera de operar en archivos en orden desde la última modificación hasta la modificación más reciente (o viceversa).
Puedo usar algo como:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... pero esto aún se romperá con cualquier archivo que tenga nuevas líneas en sus nombres, y es mucho más feo arrancar. ¿Hay una mejor manera?
--zero-terminated
gracias por eso, ¡desearía poder darte aún más puntos!info ls
: si quisiera un script a prueba de balas con ls, ¿cuál--quoting-style
debería usar?--quoting-style=escape
es la forma de elegir.ls
--quoting-style
falla (para analizar a propósito) porque solo cita nombres de archivos: cuando tienes un espacio en el nombre de un grupo. Ok, es un caso muy extraño, pero aparece en cygwin bash shell, aquí tienes nombres de grupo comoDomain Users
.La forma más fácil con diferencia es usar zsh. El calificador global clasifica
om
las coincidencias en orden cronológico inverso; usoOm
para orden cronológico.El
N
calificador global hace que el patrón se expanda a una lista vacía si el directorio está vacío. Haga esto*(DNom)
para que coincida con los archivos de puntos.fuente