shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Scritp com problema com diretorios que tem nome com e


From: Gentil de Bortoli Jr
Subject: Re: [shell-script] Scritp com problema com diretorios que tem nome com espaço
Date: Fri, 9 Nov 2007 16:20:10 -0200

On 11/9/07, Renato de Oliveira Diogo <address@hidden> wrote:
> Olá pessoal
>
>  seguinte, tenho um scritp q varre um determinado diretório (e seus filhos,
>  recursivamente) para mudança de permissão, porém alguns desses diretórios
>  tem o nome com espaço, e do jeito que estou fazendo dá problema... o scritp
>  é:
>
>  ====
>  DIR=$1
>  if [ ! "$DIR" = "" ]
>  then
>          if [ ! -d "$DIR" ]
>          then
>                  echo "::$DIR:: nao e um diretorio!"
>                  exit 1
>          fi
>          cd $DIR
>          chown -R vpopmail.vchkpw .
>          for file in `find . `
>          do
>                  if [ -d $file ]
>                  then
>                          chmod 700 $file
>                  else
>                          chmod 600 $file
>                  fi
>          done
>          exit 0
>  else
>  ====
>
>  os caminhos podem ser:
>  /home/vpopmail/domains/dominio.com.br/usuario/Maildir/.dirsemespaco
>  /home/vpopmail/domains/dominio.com.br/usuario/Maildir/.dir com espaco
>
>  Alguem sabe como eu poderia contornar esta cituação?

Renato, seu script tem espaço para várias melhorias. Mas vamos pelo começo.

O "for" e o "while" têm comportamentos diferentes nessa situação. Veja
um exemplo rápido:

[gentil@gentil:~]$ cat arquivos.txt
arquivo1
arquivo2
arquivo com espaço1
arquivo com espaço2

[gentil@gentil:~]$ cat for.sh
#!/bin/bash

for arquivo in $(cat arquivos.txt); do
        echo ${arquivo}
done

[gentil@gentil:~]$ ./for.sh
arquivo1
arquivo2
arquivo
com
espaço1
arquivo
com
espaço2

Agora o mesmo script especificando um IFS diferente:

[gentil@gentil:~]$ ./for.sh
arquivo1
arquivo2
arquivo com espaço1
arquivo com espaço2

E finalmente um com o while:

[gentil@gentil:~]$ cat while.sh
#!/bin/bash

while read  linha; do
        echo ${linha}
done < arquivos.txt

[gentil@gentil:~]$ ./while.sh
arquivo1
arquivo2
arquivo com espaço1
arquivo com espaço2

Resumindo, você pode corrigir o que imagino estar acontecendo trocando
seu IFS, no caso do for, ou usando o while.

Agora, sobre sua idéia, eu acho que acabaria sendo melhor usar melhor
a força do "find". :)

[]s
Gentil.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]