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 como este:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Funciona perfeitamente em uma máquina Linux, mas o mesmo comando não tem a opção -printf
em uma máquina SunOS. Quero personalizar minha saída no "%TY-%Tm-%Td %f\n"
formato.
Por favor, sugira alternativas para o SunOS.
shell-script
find
solaris
Pratik Mayekar
fonte
fonte
find
no Solaris, instale o pacote findutils .Respostas:
Observe que isso não tem nada a ver com o Linux; esse
-printf
predicado é específico para a implementação GNU defind
. 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 Linux está incorporada e possui comandos básicos, se houver.O
find
comando GNU , que antecede o Linux, pode ser instalado na maioria dos sistemas operacionais do tipo Unix. Certamente foi usado no Solaris (chamado SunOS naquela época) antes do lançamento do Linux.Atualmente, ele está disponível como um pacote Oracle para Solaris. No Solaris 11, está
file/gnu-findutils
, e o comando é nomeadogfind
(para GNUfind
, para diferenciá-lo dofind
comando do próprio sistema ).Agora, se você não pode instalar pacotes, sua melhor aposta é provavelmente usar
perl
:Aqui, ainda estamos usando
find
(implementação Solaris) para encontrar os arquivos, mas estamos usando seu-exec
predicado para passar a lista de arquivosperl
. Eperl
executa umlstat()
em cada um para recuperar os metadados do arquivo (incluindo a hora da modificação como o 10º elemento ($s[9]
)), interpreta-o no fuso horário local (localtime()
) e formata-o (strftime()
), que ficaprint
ao lado do nome do arquivo ($_
é a variável de loop se nenhum é especificadoperl
e$!
é equivalentestderror(errno)
ao texto de erro da última falha de chamada do sistema.fonte
ls
saída de tipo, consulte Especificação de modo Lista no pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.htmlfind
é-printf
anterior ao POSIX.2, então o pessoal do POSIX é o culpado aqui. Observe também que a especificação POSIX não era pública até os anos 2000. Eu ainda culparia o pessoal do GNU por apresentar o seu,stat
mais de uma década depois, com uma sintaxe diferente e inferior para a especificação de formato.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, eu o adicionei manualmente:Em dois arquivos de amostra que eu criei, a saída é a mesma:
fonte