Se você estiver em um sistema de arquivos ext, você pode usar debugfs
para obter a data de criação de um inode . Assim, você pode coletar os inodes para cada arquivo no diretório atual e, em seguida, classificar por tempo de criação:
#!/usr/bin/env bash
## This will hold the newest timestamp
newestT=0
## Get the partition we are running on
fs=$(df --output=source "$@" | tail -1);
## Iterate through the files in the directory
## given as a target
for file in "$@"/*; do
## Only process files
if [ -f "$file" ]; then
## Get this file's inode
inode=$(ls -i "$file" | awk 'NR==1{print $1}');
## Get its creation time
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' $fs 2>/dev/null | grep -oP 'crtime.*-- \K.*');
## Convert it to a Unix timestamp
timestamp=$(date -d "$crtime" +%s)
## Is this newer than the newest?
if [[ $timestamp -gt $newestT ]]; then
newestT=$timestamp;
newest="$file";
fi
fi
done
## Print the newest file
echo "$newest"
Salve o script acima como ~/bin/get_newest.sh
, torne-o executável ( chmod 744 get_newest.sh
) e execute assim:
~/bin/get_newest.sh /target/directory
NOTAS
-
Diferentemente das outras respostas, este, na verdade, retornará o arquivo mais recente em termos de data de criação , não o que foi modificado mais recentemente.
-
Ele só funcionará em sistemas de arquivos ext4 (talvez 3, não seguros).
-
Ele pode lidar com nomes de arquivos, espaços e novas linhas, etc., não é um problema.