[DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

1. [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 18:36h

Senhores, boa tarde e bom sábado,
Criei um script bem básico utilizando o for para alterar o proprietário de um arquivo:

for arquivo in `ls`;do chown usuario "$arquivo";done 


mas da diversos erros pois os arquivos contem espaço " ", não vou mandar a saída inteira do erro mas sim uma parte para entender melhor:

chown: não foi possível acessar 'de': Arquivo ou diretório inexistente
chown: não foi possível acessar 'Pacotes': Arquivo ou diretório inexistente
chown: não foi possível acessar 'RPM': Arquivo ou diretório inexistente
chown: não foi possível acessar 'e': Arquivo ou diretório inexistente
chown: não foi possível acessar 'YUM': Arquivo ou diretório inexistente
chown: não foi possível acessar 'Documento': Arquivo ou diretório inexistente
chown: não foi possível acessar 'sem': Arquivo ou diretório inexistente
chown: não foi possível acessar 'título': Arquivo ou diretório inexistente
chown: não foi possível acessar '1': Arquivo ou diretório inexistente


Queria utilizar a mesma estrutura do comando, alguma sugestão ?


  


2. MELHOR RESPOSTA

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 09/02/2019 - 21:23h

tenta assim então, adapte à sua necessidade.

find /DIRETÓRIO -iname "*.EXTENSÃO" -exec chmod PERMISSÃO {} \; 


aqu deu certim
mauricio@phantom ~/teste $ ls -l
total 4
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 1.txt
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 2.txt
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 3.txt
-rwxr-xr-x 1 mauricio mauricio 99 Fev 9 21:15 sh.sh
mauricio@phantom ~/teste $ find . -iname "*.txt" -exec chmod 777 {} \;
mauricio@phantom ~/teste $ ls -l
total 4
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 1.txt
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 2.txt
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 3.txt
-rwxr-xr-x 1 mauricio mauricio 99 Fev 9 21:15 sh.sh
mauricio@phantom ~/teste $



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



3. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 09/02/2019 - 19:24h

V aí

https://www.vivaolinux.com.br/topico/Shell-Script/Pastas-com-espacos
https://www.vivaolinux.com.br/topico/Shell-Script/Remover-arquivos-com-espacos-em-branco
https://stato.blog.br/wordpress/nomes-de-arquivos-e-pastas-com-espacos-no-shell-script/

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




4. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 20:57h

Mauriciodez escreveu:

V aí

https://www.vivaolinux.com.br/topico/Shell-Script/Pastas-com-espacos
https://www.vivaolinux.com.br/topico/Shell-Script/Remover-arquivos-com-espacos-em-branco
https://stato.blog.br/wordpress/nomes-de-arquivos-e-pastas-com-espacos-no-shell-script/

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Valeu +1 vez amigao, vou deixar como fonte de estudo para mais tarde, mas infelizmente esses artigos não tiveram a solução definitiva, tive que fazer alguns ajustes do scrpit para que ele funcionasse!

mas msm assim valeu!


5. Resolvido

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 21:00h

Tive que alterar o nome dos arquivos primeiro e depois fazer a alteração das permissões, poderia ser um script mais simples, mas não possou o conhecimento necessário ainda!

ls | grep " " | while read i; do novo=`echo $i | tr ' ' '-'`; mv "$i" $novo; done && for arq in `ls`;do chown usuario $arq; done 



6. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Slackjeff
slackjeff

(usa Slackware)

Enviado em 09/02/2019 - 21:10h

Pedersini escreveu:

Tive que alterar o nome dos arquivos primeiro e depois fazer a alteração das permissões, poderia ser um script mais simples, mas não possou o conhecimento necessário ainda!

ls | grep " " | while read i; do novo=`echo $i | tr ' ' '-'`; mv "$i" $novo; done && for arq in `ls`;do chown usuario $arq; done 



Tópico ta resolvido, mas quando eu vi essa linha fui obrigado a comentar hehehe.
Um jeito mais simples e com menos pipeline é usar o próprio glob do shell '*'. Este cara significa qualquer nome, aliado com um loop for fica poderoso e não há quebras de linhas, porem ele não consegue passar para um diretório absoluto por exemplo /home/slackjeff/*, você irá precisar ir até lá.

pushd DIRETORIO &> /dev/null # Indo até o diretório e empilhando
# Checagem e executando chown
for checkme in *; do
chown USUARIO $checkme &>/dev/null || echo "Ops, não rolou chown em: $checkme"
done

popd &> /dev/null # Retornando para aonde tudo começou


Solução mais simples e elegante! :)
Dica! Nunca use ls para nada em scripts. Ele é muito falho e não é nenhum pouco confiavel... Ache sempre alternativas.

I'M ROOT!

Slackware user since ~2008
Meu canal no youtube:
https://www.youtube.com/SlackJeff

Meu Site:
https://www.slackjeff.com.br/

Meus Programas estão aqui:
https://notabug.org/jeffersonrocha








7. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 21:29h

slackjeff,

Obrigado pela resposta, opiniões são sempre muito bem vindas, ainda mais quando é para ajudar!

Mas eu não entendi o motivo da linha

pushd DIRETORIO &> /dev/null 

Eu não poderia estar dentro do diretório e executar o comando ?
Você poderia fazer um exemplo do meu problema utilizando esse seu código?! só para ficar mais claro


8. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 21:36h

Mauriciodez escreveu:

tenta assim então, adapte à sua necessidade.

find /DIRETÓRIO -iname "*.EXTENSÃO" -exec chmod PERMISSÃO {} \; 


aqu deu certim
mauricio@phantom ~/teste $ ls -l
total 4
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 1.txt
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 2.txt
-rw-r--r-- 1 mauricio mauricio 0 Fev 9 21:06 doc 3.txt
-rwxr-xr-x 1 mauricio mauricio 99 Fev 9 21:15 sh.sh
mauricio@phantom ~/teste $ find . -iname "*.txt" -exec chmod 777 {} \;
mauricio@phantom ~/teste $ ls -l
total 4
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 1.txt
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 2.txt
-rwxrwxrwx 1 mauricio mauricio 0 Fev 9 21:06 doc 3.txt
-rwxr-xr-x 1 mauricio mauricio 99 Fev 9 21:15 sh.sh
mauricio@phantom ~/teste $



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Cara aqui deu certo também, no caso só alterei o
-exe chown usuario {}\; 


E eu fazendo aquele codigo bost*! kkkkkk

No caso o "{}" é o resultado da do comando find?


9. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 21:38h

Para aqueles que tiverem o mesmo problema, o comando final ficou assim:

find . -exec chown usuario {} \;  



10. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/02/2019 - 21:40h


Pedersini escreveu:

Tive que alterar o nome dos arquivos primeiro e depois fazer a alteração das permissões, poderia ser um script mais simples, mas não possou o conhecimento necessário ainda!

ls | grep " " | while read i; do novo=`echo $i | tr ' ' '-'`; mv "$i" $novo; done && for arq in `ls`;do chown usuario $arq; done 


Boa noite Pedersini, Simplificando seu comando:
"PEGA" arquivos com espaço no nome e altera o espaço para "_".
for ARQ in *' '* ; do echo "$ARQ: ${ARQ// /_}" ; done


11. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 09/02/2019 - 21:49h


Pedersini escreveu:
Cara aqui deu certo também, no caso só alterei o
-exe chown usuario {}\; 


E eu fazendo aquele codigo bost*! kkkkkk

No caso o "{}" é o resultado da do comando find?


Putz ... vc queria era chown e fiz chmod ... foi mal aí !!! velho tem essas leseras mesmo !!! kkkkkkkkkkkkkkkkkkkkk

kra ... não vou saber te explicar direito, mas é tipo assim, as chaves são expansões de variáveis, então é como se a cada retorno do find fosse uma variável e depois no exec fosse invocada essa variável ... o entendedores de shell aí pode explicar certinho, só sei fazer.

Essa parada de usar exec no find pode ser usada para conacatenar uma pancada de coisa

find + rm
find + cp
find + mv
find + chmod
find + chown
etc

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




12. Re: [DÚVIDA] Utilizando o for para fazer loop (chown) [DÚVIDA] [RESOLVIDO]

Pedersini
Pedersini

(usa Debian)

Enviado em 09/02/2019 - 21:56h

Mauriciodez escreveu:


Pedersini escreveu:
Cara aqui deu certo também, no caso só alterei o
-exe chown usuario {}\; 


E eu fazendo aquele codigo bost*! kkkkkk

No caso o "{}" é o resultado da do comando find?


Putz ... vc queria era chown e fiz chmod ... foi mal aí !!! velho tem essas leseras mesmo !!! kkkkkkkkkkkkkkkkkkkkk

kra ... não vou saber te explicar direito, mas é tipo assim, as chaves são expansões de variáveis, então é como se a cada retorno do find fosse uma variável e depois no exec fosse invocada essa variável ... o entendedores de shell aí pode explicar certinho, só sei fazer.

Essa parada de usar exec no find pode ser usada para conacatenar uma pancada de coisa

find + rm
find + cp
find + mv
find + chmod
find + chown
etc

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Tá suave men essa hora de sábado ainda, merece um desconto kkkkkk

mais demoro irmao eu entendi a função das {} no comando, valeu mais uma vez pela ajuda!

Vcs todos aqui do grupo são [*****]!



  
01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts