[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.