Não há um método bom e portátil para classificar os arquivos pelo tempo deles. Os métodos mais portáteis são:
- Se você puder assumir que os nomes de arquivos contêm apenas caracteres imprimíveis, chame
ls -ltd
. - Caso contrário, use perl.
Este é o método clássico para ordenar arquivos por data com ferramentas GNU. Você está assumindo que os nomes dos arquivos não contêm nova linha; isso é facilmente corrigido alterando \n
para
e chamando sort
-z
com a opção sed
. Ah, e soltar a rotunda $idir
chamadas; Tenha em atenção que o seu script não funcionará se #*^$\[
contiver qualquer om
, porque sed irá interpretá-los como caracteres especiais.
cd "$idir" &&
find -mindepth 3 -maxdepth 3 -type d -printf '%T@ %Tc\t\t%pfiles=(*(om))
echo "The oldest file is $files[-1]"
' |
sort -hz |
tr 'zmodload zsh/stat
describe () {
typeset -A st
zstat -s -H st "$REPLY"
echo "$st[mtime] $REPLY"
}
: */*/*(/+describe)
\n' '\ncd "$idir" &&
find -mindepth 3 -maxdepth 3 -type d -printf '%T@ %Tc\t\t%pfiles=(*(om))
echo "The oldest file is $files[-1]"
' |
sort -hz |
tr 'zmodload zsh/stat
describe () {
typeset -A st
zstat -s -H st "$REPLY"
echo "$st[mtime] $REPLY"
}
: */*/*(/+describe)
\n' '\n%pre%' |
sed 's/^[^ ]* //'
' |
sed 's/^[^ ]* //'
A propósito, você está classificando arquivos pelo tempo de modificação, não pelo tempo de criação. A maioria das variantes unix que não sejam o OSX não suportam tempos de criação até o fim (do sistema de arquivos através do kernel até as ferramentas userland).
A maneira fácil e limpa de classificar arquivos pelo tempo de modificação é usar zsh. O qualificador de glob Om
classifica os arquivos em idade crescente (use zstat
para obter o arquivo mais antigo primeiro).
Para obter resultados como o que você mostra, use %code% .
%pre%