O find
comando no Linux tem muitas opções em comparação com o find
comando no SunOS ou Solaris.
Eu quero usar o find
comando assim:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Funciona perfeitamente bem em uma máquina Linux, mas o mesmo comando não tem a opção -printf
em uma máquina SunOS. Eu quero personalizar minha saída no "%TY-%Tm-%Td %f\n"
formato.
Por favor, sugira quaisquer alternativas para o SunOS.
Note que não tem nada a ver com Linux; esse
-printf
predicado é específico para a implementação GNU dofind
. 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 Linux são incorporados e possuem comandos básicos, se houver algum.O comando GNU
find
, que é anterior ao Linux, pode ser instalado na maioria dos sistemas operacionais do tipo Unix. Certamente foi usado no Solaris (chamado SunOS na época) antes do lançamento do Linux.Atualmente, está disponível até como pacote Oracle para Solaris. No Solaris 11, isso está em
file/gnu-findutils
, e o comando é nomeadogfind
(para GNUfind
, para distingui-lo do comando do próprio sistemafind
).Agora, se você não pode instalar pacotes, sua melhor aposta é provavelmente usar
perl
:Aqui, ainda estamos usando
find
(implementação do Solaris) para encontrar os arquivos, mas estamos usando seu-exec
predicado para passar a lista de arquivos paraperl
. Eperl
faz umlstat()
em cada um para recuperar os metadados do arquivo (incluindo o tempo de modificação como o 10º elemento ($s[9]
)), interpreta-o no fuso horário local (localtime()
) e formata-o (strftime()
) que é entãoprint
ao lado do nome do arquivo ($_
é a variável do loop se none é especificado emperl
, e$!
é o equivalente astderror(errno)
, o texto de erro da última falha de chamada do sistema).Outra maneira de abordá-lo é com o
find2perl
script, que converte (aqui, um subconjunto) de umfind
comando em um script perl correspondente. O script perl usa umFile::Find
módulo para fazer o trabalho pesado. Como o script find2perl no meu sistema não suportava o-printf
predicado, adicionei-o manualmente:Em dois arquivos de amostra que criei, a saída é a mesma: