Une note sur la fiabilité:
Puisque le caractère de nouvelle ligne est aussi valide que n'importe quel autre dans un nom de fichier, toute solution qui repose sur des lignes comme celles basées sur head
/ tail
est imparfaite.
Avec GNU ls
, une autre option consiste à utiliser l' --quoting-style=shell-always
option et un bash
tableau:
eval "files=($(ls -t --quoting-style=shell-always))"
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
(ajoutez l' -A
option à ls
si vous souhaitez également prendre en compte les fichiers cachés).
Si vous voulez vous limiter aux fichiers normaux (ne pas tenir compte des répertoires, des fifos, des périphériques, des liens symboliques, des sockets ...), vous devez recourir à GNU find
.
Avec bash 4.4 ou plus récent (pour readarray -d
) et GNU coreutils 8.25 ou plus récent (pour cut -z
):
readarray -t -d '' files < <(
LC_ALL=C find . -maxdepth 1 -type f ! -name '.*' -printf '%T@/%f\0' |
sort -rzn | cut -zd/ -f2)
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
Ou récursivement:
readarray -t -d '' files < <(
LC_ALL=C find . -name . -o -name '.*' -prune -o -type f -printf '%T@%p\0' |
sort -rzn | cut -zd/ -f2-)
Le mieux ici serait d'utiliser zsh
et ses qualificatifs glob au lieu d' bash
éviter tous ces tracas:
Le fichier régulier le plus récent dans le répertoire courant:
printf '%s\n' *(.om[1])
Y compris les cachés:
printf '%s\n' *(D.om[1])
Deuxième plus récent:
printf '%s\n' *(.om[2])
Vérifiez l'âge du fichier après la résolution du lien symbolique:
printf '%s\n' *(-.om[1])
Récursivement:
printf '%s\n' **/*(.om[1])
En outre, avec le système de complétion ( compinit
et co) activé, Ctrl+Xmdevient un complément qui se développe au fichier le plus récent.
Alors:
vi Ctrl+Xm
Vous ferait éditer le fichier le plus récent (vous aurez également une chance de voir lequel il avant d'appuyer sur Return).
vi Alt+2Ctrl+Xm
Pour le deuxième fichier le plus récent.
vi * .cCtrl+Xm
pour le c
fichier le plus récent .
vi * (.)Ctrl+Xm
pour le fichier régulier le plus récent (pas de répertoire, ni de fifo / périphérique ...), et ainsi de suite.
watch -n1 'ls -Art | tail -n 1'
- affiche les tout derniers fichiers