Configuración

Configuración

Con frecuencia descargo archivos PDF con nombres de archivos numéricos atroces desde mi navegador. Estos entran automáticamente en ~/Downloads. Idealmente me gustaría poder abrir estos archivos con:

evince "the most recently modified file"

sin tener que abrir ~/Downloadspara buscar el nombre del archivo.

¿Existe una forma sencilla de especificar "el archivo modificado más recientemente" en bash?

NOTA: Sé que esposiblepara hacer esto, pero lo ideal es que esté buscando una solución que sea más sencilla que ls -tverificar ~/Downloadsel nombre.

Respuesta1

evince "$(ls -t | head -n1)"

Si bien manejará espacios, tabulaciones y (creo) impresión especial, se interrumpirá si el nombre del archivo contiene una nueva línea y posiblemente algunos otros caracteres que no se imprimen.

Respuesta2

Este es un enfoque más correcto y sólido que el de ls -t, a costa de cierta complejidad adicional.

Configuración

Agregue un breve script de shell (código a continuación) a su archivo $PATH. ~/bines un buen lugar para ello.

Recuerde asegurarse

  • el script es ejecutablechmod +x ~/bin/script_name
  • ~/binestá en tu$PATH

Uso

Pase el comando que desea ejecutar en el archivo más nuevo ~/Downloada last_download.

Ejemplos

Suponiendo que hayas nombrado el guiónlast_download

  • last_download(sin argumentos): ejecuta evince, el comando predeterminado, en el archivo más nuevo de~/Downloads
  • last_download mplayer: se ejecuta mplayeren el archivo más nuevo en~/Downloads
  • last_download cp -t ~/Desktop: copia el archivo más nuevo ~/Downloadsen~/Desktop

Código

#!/bin/sh
# Usage: last_download [cmd [options]...]

newest=
dir=~/Downloads

# default command
if [ $# -eq 0 ]; then
        set -- evince;
fi

# find newest file
for f in "$dir"/*; do
        if [ -z "$newest" ] || [ "$f" -nt "$newest" ]; then
                newest="$f"
        fi
done
if ! [ -e "$newest" ]; then
        exit 1
fi

# run command on newest file
"$@" "$newest"

Nota: El script sólo busca dentro, ~/Downloadpero no sería difícil generalizarlo para que admita cualquier directorio, en cuyo caso también se justificaría un cambio de nombre.

Respuesta3

exec zsh
evince ~/Downloads/*.pdf(om[1])

o si no quieres cambiar a zsh

cd ~/Downloads
zsh -c 'evince ./*.pdf(om[1])'

Los bits entre paréntesis sonclasificatorios globales. omcambia el orden de los globos para usar la hora de modificación en lugar del nombre (el más nuevo primero). [1]significa utilizar sólo la primera coincidencia.

Para más información, veresta respuesta a "¿Cómo filtro un globo en zsh?".

Respuesta4

No, e incluso si lo hubiera, no podría estar seguro de que algún registro del sistema no sea generalmente el archivo actualizado más recientemente.

La respuesta de Kevin (se me adelantó) funciona si solo quieres evitara manoapertura ~/Downloads.

información relacionada