como escrever um script para executar um comando stat para diretórios e subdiretórios e imprimir apenas o arquivo mais recente

1

como encontrar os arquivos mais recentes em um diretório? meu script está dando algumas saídas extras com o arquivo mais recente no diretório.

#!/bin/bash
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
 (stat -c %y  "$directory"/* | tail -n 1)
done
 for D in "$entry"
 do
 (ls -ltr "$D" | tail -n 1)
done

saída atual:

2018-02-19 12:24:19.842748830 -0500
2018-02-19 12:24:19.842748830 -0500
2018-02-19 12:24:19.842748830 -0500
-rw-r--r-- 1 root root 0 Feb 19 12:19 test3.xml

minha estrutura de diretórios é como abaixo

$ pwd
/nfs/test_library/myfolder/test

$ ls -ltr test
1.0  2.0  3.0

$ ls -ltr 1.0
test1.xml
$ ls -ltr 2.0
test2.xml
$ ls -ltr 3.0
test3.xml(which is the most recent file)

então eu tenho que fazer o script funcionar para imprimir apenas test3.xml

    
por user2576747 26.02.2018 / 19:20

1 resposta

1

Eu consegui realizar o que acredito que você quer com o seguinte:

GNU stat

read -rp "Please type in the directory you want all the files to be listed" directory
if [ -d "$directory" ]; then
    find "$directory" -type f -exec stat --printf='%Y\t%n\n' {} \; | sort -n -k1,1 | tail -1
else
    echo "Error, please only specify a directory"
fi

BSD stat

read -rp "Please type in the directory you want all the files to be listed" directory
if [ -d "$directory" ]; then
    find "$directory" -type f -exec stat -F -t '%s' {} \; | sort -n -k6,6 | tail -1
else
    echo "Error, please only specify a directory"
fi

Isso localizará todos os arquivos no diretório especificado recursivamente. Em seguida, ele os registrará com seu registro de data e hora de modificação em um formato de registro de data e hora EPOCH do UNIX. Em seguida, ele os classifica com base nesse campo de registro de data e hora. Finalmente, imprime apenas o último resultado (arquivo atualizado mais recentemente).

    
por 26.02.2018 / 19:36