Note que não tem nada a ver com o Linux; esse predicado -printf
é específico para a implementação GNU de find
. O Linux não é um sistema operacional, é apenas o kernel encontrado em vários sistemas operacionais. Enquanto a maioria desses sistemas operacionais costumava usar uma área de usuário GNU no passado, agora a grande maioria dos sistemas operacionais que usam o Linux estão incorporados e possuem comandos básicos, se tiverem algum.
O comando GNU find
, que antecede o Linux, pode ser instalado na maioria dos sistemas operacionais baseados em Unix. Foi certamente usado no Solaris (chamado SunOS naquela época) antes do lançamento do Linux.
Atualmente, ele está disponível como um pacote do Oracle para Solaris. No Solaris 11, isso é em file/gnu-findutils
, e o comando é chamado de gfind
(para o GNU find
, para diferenciá-lo do comando find
do próprio sistema).
Agora, se você não pode instalar pacotes, sua melhor aposta é provavelmente usar perl
:
find data/ -type f -name "temp*" -exec perl -MPOSIX -le '
for (@ARGV) {
unless(@s = lstat($_)) {
warn "$_: $!\n";
next;
}
print strftime("%Y-%m-%d", localtime($s[9])) . " $_";
}' {} + | sort -r
Aqui, ainda estamos usando find
(implementação do Solaris) para encontrar os arquivos, mas estamos usando o predicado -exec
para passar a lista de arquivos para perl
. E perl
faz um lstat()
em cada para recuperar os metadados do arquivo (incluindo o tempo de modificação como o 10º elemento ( $s[9]
)), interpreta no fuso horário local ( localtime()
) e formata ( strftime()
) que então print
s ao lado do nome do arquivo ( $_
é a variável de loop se nenhum for especificado em perl
e $!
for o equivalente a stderror(errno)
, o texto do erro da última falha de chamada do sistema ).