Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. Pessoal, boa noite!

    Sou novo no fórum e também no universo Linux.
    Me deparei com um problema ao executar comando printf.

    Fiz um script para manipular nome de arquivo dinamicamente e uma das funções é colocar uma parte do nome em sequência numérica a partir de uma entrada do usuário... Pois bem, para simplificar, quando executo o comando abaixo tenho alguns problemas.

    printf "%04d\n" $var

    Quando esta variável assume o valor 08 me é retornado o seguinte erro:

    -bash: printf: 08: invalid number

    No entanto o comando tem a saída 0000. Com 09 também dá o mesmo problema, mas o mais curioso é que quando o valor é 010, por exemplo, não há nenhum erro e o retorno do comando é 0008.
    Não tenho noção do que possa estar acontecendo... Quando o valor é somente 8 e não tem o zero à esquerda o comportamento é o esperado.

    Alguém pode ter idéia do que estou fazendo de errado?

    Obrigado

  2. Então, quando vc utiliza o "%d" você define que aquela posição receberá um valor inteiro, onde 08 é diferente de 8 que é um número inteiro, por isso a mensagem invalid number
    Agora o pq de vc colocar 010 e receber 0008, é uma boa pergunta... ele deve tentar fazer alguma conversão ..

    Talvez se você postar o código ai dê pra gente ter uma idéia de alguma solução alternativa pra você....

    Abço
    Filipe



  3. Felipe,
    Também achei estranho este tipo de conversão. O código está na máquina em meu trabalho e não tenho acesso a ela agora.
    Amanhã postarei o código.
    Obrigado pela resposa.

  4. Segue o código:

    #!/bin/bash
    lista=$(ls -l $1 | grep ^d | awk '{print $9}')
    ficha=$2
    for i in $lista; do
    dir1=$1/$i
    cd $dir1
    lista2=$(ls -l | grep ^d | awk '{print $9}')
    for n in $lista2; do
    mkdir /mnt/Processados/$ficha
    cd $dir1/$n
    mv $n.tif /mnt/Processados/$ficha/OUT09-$ficha-$(printf "%04d\n" $n).tif
    done
    ficha=$((($ficha+1)))
    done

    Ele pega o primeiro parâmetro que é o diretório onde estão as imagens, depois o número que vai iniciar a contagem de uma parte do nome. Para ficar mais claro, são vários arquivos em vários diretórios sendo que cada diretório tem somente 1 arquivo. E o nome do arquivo é o mesmo do diretório.



  5. Consegui resolver... Não da melhor forma, mas deu o resultado que esperava, para este caso.

    Usei o awk '{print substr($0,5,4)}' ao invés do printf. Como o tamanho da string é padrão, pude fazer desta forma.

    Mas ainda estou "encucado" com este problema do printf.






Tópicos Similares

  1. sqwebmail, user id or passwd invalid
    Por gl no fórum Servidores de Rede
    Respostas: 0
    Último Post: 25-09-2004, 16:41
  2. IWCONFIG -> Invalid Misc.
    Por tcheturbo no fórum Redes
    Respostas: 1
    Último Post: 24-09-2004, 19:28
  3. Adsl Modem 5200 part number E240
    Por Aldo no fórum Redes
    Respostas: 2
    Último Post: 12-06-2004, 10:03
  4. Iptables: SNAT Invalid Argument?
    Por Hacinn no fórum Servidores de Rede
    Respostas: 6
    Último Post: 04-05-2004, 10:28
  5. erro : Invalid theme, configure your $default_theme
    Por binhomk no fórum Servidores de Rede
    Respostas: 0
    Último Post: 29-04-2004, 07:18

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L