printf no bash

Atualizado em: 28/07/2006



Sobre este documento

Exemplos de linha de comando e script com uso de printf em bash.

find + printf

Alguns exemplos mostrando somente nomes de arquivos

  
  Com quebra de linha, um nome por linha (\n) insere a quebra de linha
  
  find /tmp/guiaz -type f -printf '%f\n'
  
  find /tmp/guiaz -type f -printf "%f\n"
  
  Com sort, em ordem normal
  
  find /tmp/guiaz -type f -printf '%f\n' | sort
  
  Invertendo a ordem
  
  find /tmp/guiaz -type f -printf '%f\n' | sort -r
  
  resultado na mesma linha sem separador
  
  find /tmp -type f -printf '%f'
  
  resultado na mesma linha com separador, neste exemplo " ; ", troque pelo caractere desejado
  
  find /tmp/guiaz -type f -printf '%f ; '

Mais alguns exemplos com resultados.

Caminho, nome, último acesso e permissão

  find /tmp/guiaz -type f -printf '%p %a %m\n'
  
  find /home/zago/guiaz/A-menu.t2t -type f -printf '%p %a %m\n'
  /home/zago/guiaz/A-menu.t2t Wed Jul 26 22:24:43 2006 644

Veja mais opções no tópico seguinte (manual do printf), faça testes, compare o resultado com outras opções, troque nos exemplos acima (%f %p %a %m) pela opção que melhor lhe atende.

Passe o resultado do "find" via pipe "|" para "sort" ordenar. Resulado longo ou filtro complexo, considere salvar em arquivo para depois ordenar.

Listar arquivos por ordem de data.

find /tmp -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort

Altere o caminho para o diretório que deseja pesquisar, também pode alterar os separadores

/tmp -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n' | sort

Redirecione o resultado para arquivo. Também faça testes com outras ferramentas como cud, sed, awk em lugar do sort.

manual do printf (parte do man find no CL10

Cópia parcial do manual do Conectiva 10 (mand find), tópico sobre printf

         -printf format
                Verdadeiro; lista format na saída padrão, interpretando `\' como
                caracter de fuga e `%' como diretivas. Largura de campos e  pre-
                cisão podem ser especificadas de forma similar à função `printf'
                da linguagem C. Diferentemente de -print, -printf  não  adiciona
                um  caracter  de  nova linha ao final da cadeia de caracteres. O
                caracter de fuga e as diretivas são:
  
                \a     Campainha de alarme.
  
                \b     Retorno.
  
                \c     Para a impressão deste formato imediatamente e descarrega
                       a saída.
  
                \f     Alimentação de formulário.
  
                \n     Nova linha.
  
                \r     Avanço e retorno de linha.
  
                \t     Tabulação horizontal.
  
                \v     Tabulação vertical.
  
                \\     Um literal de barra reversa (`\').
  
                Um  caracter  `\'  seguido  por outro é tratado como um caracter
                comum, sendo que ambos serão impressos.
                %%     Um sinal de percentual.
  
                %a     Data e hora do último acesso ao arquivo no formato retor-
                       nado pelo função C `ctime'.
  
                %Ak    Data  e  hora do último acesso em um formato especificado
                       em k, o qual é, ou `@' ou  uma  diretiva  para  a  função
                       `strftime'  da  linguagem  C.  Os  valores possíveis em k
                       estão listados  abaixo;  alguns  deles  podem  não  estar
                       disponíveis em todos os sistemas, devido às diferenças da
                       função `strftime' entre eles.
  
                       @      segundos desde 1 de Janeiro de 1970, 00:00 GMT.
  
                       Campos:
  
                       H      hora (00..23)
  
                       I      hora (01..12)
  
                       k      hora ( 0..23)
  
                       l      hora ( 1..12)
  
                       M      minutos (00..59)
  
                       p      AM ou PM
  
                       r      hora, 12-horas (hh:mm:ss [AP]M)
  
                       S      segundos (00..61)
  
                       T      hora, 24-horas (hh:mm:ss)
  
                       X      representação local de horário (H:M:S)
  
                       Z      zona de horário (por exemplo,  EDT),  ou  nada  se
                              nenhuma zona de horário for determinada.
  
                       Campos da data:
  
                       a      abreviatura local dos dias da semana (Dom..Sab)
  
                       A      nome   completo  do  dia  da  semana,  de  tamanho
                              variável (Domingo..Sábado)
  
                       b      nomes dos meses abreviados (Jan..Dez)
  
                       B      nomes dos meses  completos  com  tamanho  variável
                              (Janeiro..Dezembro)
  
                       c      data  e  horário  locais  (Sáb Nov 04 12:02:33 EST
                              1998)
  
                       d      dia do mês (01..31)
  
                       D      data (mm/dd/aa)
  
                       h      igual a b
  
                       j      dia do ano (001..366)
  
                       m      mês (01..12)
  
                       U      número  da  semana  no  ano  com  Domingo  como  o
                              primeiro dia da semana (00..53)
  
                       w      dia da semana (0..6)
  
                       W      número  da  semana no ano com Segunda-feira como o
                              primeiro dia da semana (00..53)
                       x      representação local da data (mm/dd/yy)
  
                       y      últimos dois dígito do ano (00..99)
  
                       Y      ano (1970...)
  
                %b     Tamanho do arquivo em blocos  de  512  bytes  arredondado
                       para cima.
  
                %c     Data  da  última  mudança de status do arquivo no formato
                       retornado pela função `ctime' da linguagem C.
  
                %Ck    Data da última mudança de status do arquivos  no  formato
                       especificado por k, o qual é o mesmo que para %A.
  
                %d     Profundidade  dos  arquivos na árvore de diretórios; zero
                       significa que o  arquivo  é  um  argumento  da  linha  de
                       comando.
  
                %f     Nome   do  arquivo  com  exclusão  de  qualquer  nome  de
                       diretório (somente o último elemento).
  
                %F     Tipo do sistema de arquivos em que o arquivo se encontra;
                       este valor pode ser usado por -fstype.
  
                %g     Nome do grupo de arquivos, ou a identificação numérica do
                       grupo caso este não tenha nome.
  
                %G     Identificação numérica do grupo do arquivo.
  
                %h     Caminho ou diretório(s) onde o  arquivo  está  localizado
                       (tudo exceto o último elemento).
  
                %H     Argumento  da  linha  de  comando  na  qual o arquivo foi
                       encontrado.
  
                %i     Número do inode do arquivo (em decimais).
  
                %k     Tamanho do arquivo em  blocos  de  1K  (arredondado  para
                       cima).
  
                %l     Objeto  da  ligação simbólica (vazio se o arquivo não for
                       uma ligação simbólica).
  
                %m     Bits das permissões do arquivo (em octal).
  
                %n     Número de ligações diretas para o arquivo.
  
                %p     Nome do arquivo.
  
                %P     Nome do arquivo com o nome dos  argumentos  da  linha  de
                       comando sob a qual ele foi removido.
  
                %s     Tamanho do arquivo em bytes.
  
                %t     Data  da  última modificação do arquivo no formato retor-
                       nado pela função `ctime' da linguagem C.
  
                %Tk    Data da última modificação do arquivo no formato  especi-
                       ficado em k, o qual é o mesmo para %A.
  
                %u     Nome  do  dono do arquivo ou a sua identificação numérica
                       se o dono não tiver nome.
  
                %U     Identificação numérica do dono do arquivo.
                Um caracter `%' seguido por qualquer outro caracter será descar-
                tado (mas o outro caracter será impresso).
  
         -prune Caso  -depth não seja informado, será verdadeiro; não descendo a
                partir do diretório atual.
                Caso -depth seja informado, será falso e não terá efeito.
  
         -ls    Verdadeiro; lista o arquivo atual no formato `ls -dils' na saída
                padrão.  O  contador de blocos utiliza unidades de 1 Kb, a menos
                que a variável de ambiente POSIXLY_CORRECT  esteja  configurada,
                neste caso a unidade será de 512 bytes.

Indicações

find - exemplos em linha de comando e script
http://www.zago.eti.br/find.html

Página principal sobre script em geral (FAQ)
http://www.zago.eti.br/script/A-menu-scripts.html

Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html