Criação Bash [RESOLVIDO]

1. Criação Bash [RESOLVIDO]

thiago
lacerdat25

(usa Red Hat)

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

Galera!
Como faço para ler um arquivo .TXT, linha por linha e criar uma pasta com o referido nome de da linha?
Ex?
Arq.txt Pasta
casa casa
maria maria
joao joao
jose jose


  


2. MELHOR RESPOSTA

Matheus
pylm

(usa Gentoo)

Enviado em 02/04/2019 - 21:07h





#!/usr/bin/bash
arquivo="$1"

while read -r linha; do
mkdir "$linha"
done < "$arquivo"


Use assim:


./script.sh arq.txt





3. Criação Bash

thiago
lacerdat25

(usa Red Hat)

Enviado em 02/04/2019 - 21:15h

Showww

Não precisa ser especificamento um bash, na realidade que s criar um script que usarei para ler um arquivo .TXT e criar pastas com os nomes das linhas do arquivo.

Sou usuário novo em linux, estou em processo de adaptação. Estou curtindo muito a ferramenta!

Valeu!


4. Re: Criação Bash [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/04/2019 - 21:48h


lacerdat25 escreveu:

Galera!
Como faço para ler um arquivo .TXT, linha por linha e criar uma pasta com o referido nome de da linha?
Ex?
Arq.txt Pasta
casa casa
maria maria
joao joao
jose jose


Boa noite Lacerda.
Segue + uma opção.
 awk '{printf "mkdir %s \n" ,$1}' arquivo.txt|bash 

#Utilizando os recursos do awk.... E um "pipe" direcionando para o "bash"
VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


5. Re: Criação Bash

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/04/2019 - 13:36h

A maneira mais simples é como o pylm mostrou. Mas ela tem a desvantagem de que tudo dentro do bloco while...done tem passar a ler do arquivo: se algum comando, por alguma razão, tentar ler alguma coisa do terminal, ele lerá do mesmo arquivo que deveria alimentar, inicialmente, o comando read usado no laço de repetição.

Mais seguro que isso é usar redirecionamento de descritores, e especificar o descritor exclusivamente para o read.
exec 3< arquivo.txt  # Descritor 3 é associado ao arquivo.
while read -u 3 linha; do
mkdir "$linha"
done
exec 3<&- # Desassocia o descritor 3 de qualquer arquivo.



... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


6. Re: Criação Bash [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/04/2019 - 15:29h


paulo1205 escreveu:

A maneira mais simples é como o MSoliver mostrou.
Mas ela tem a desvantagem de que tudo dentro do bloco while...done tem passar a ler do arquivo:
se algum comando, por alguma razão, tentar ler alguma coisa do terminal, ele lerá do mesmo arquivo que deveria alimentar, inicialmente, o comando read usado no laço de repetição.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


Boa tarde Paulo.
Não encontrei o laço (while) que você mencionou no comando que postei:
awk '{printf "mkdir %s \n" ,$1}' arquivo.txt|bash
Nem a sua explicação.....
se algum comando, por alguma razão, tentar ler .....
o awk, lerá o arquivo especificado!!!!

Att.: Marcelo Oliver


7. Re: Criação Bash

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/04/2019 - 16:28h

Caro MSOliver,

Eu me confundi. Na verdade, a resposta à que eu me referi foi a do pylm, não a sua. Já corrigi a mensagem original.

Mas a sua solução está sujeita ao mesmo problema de princípio, que é um redirecionamento que afeta múltiplos comandos: o bash, que é o leitor da pipeline, e tudo o que for por ele executado

No caso em questão, em que você chama um comando que não pede confirmação de modo nenhum, não chega produzir comportamento errôneo. Mas se fosse outro comando, como rm, que pode pedir confirmação (especialmente se valer o alias, comumente utilizado, que troca “rm” por “rm -i”), ou alguma outra coisa que possa eventualmente querer ler dados da entrada padrão), essa entrada seria consumida do mesmo pipeline.

Note que eu NÃO DISSE que a solução do pylm ou, agora, a sua estão erradas, mas que têm uma desvantagem ou um problema latente. Eu acredito que seja bom conhecer esses detalhes, mesmo em casos em que eles não gerem comportamento indesejado, a fim de saber, de antemão, evitar a reprodução do mesmo padrão de codificação em casos em que poderiam produzir efeitos indesejados.

Se você quiser considerar preciosismo, pode considerar. Mas eu trabalho com UNIX e Linux há 26 anos, e eu já vi mais de um caso de efeitos indesejados provocados por construções semelhantes às que vocês mostraram — inclusive um caso em que houve uma perda maciça de dados (vários terabytes, armazenados em storages NetApp, e que tiveram de ser restaurados de fita). Programar (ou scriptar) de modo seguro requer entendimento e prática. Minha intenção é dar subsídios para que esse conhecimento possa ser assimilado, e estimular essa prática. Seja com shell, com Perl, com C e C++, ou qualquer outra ferramenta.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


8. Re: Criação Bash [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/04/2019 - 16:36h


Ok Paulo, agora ficou claro.
Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts