laço while

1. laço while

thiago
lacerdat25

(usa Red Hat)

Enviado em 16/09/2020 - 00:05h

quero listar todos os arquivos que tenho num S3 um por um, linha usando um laço para realizar uma comparação arquivo por arquivo.

#!/bin/bash

quantArqui=$(aws s3 ls s3://minhapasta/arquivos | grep .txt -c) #quantidade de arquivos
arquivo=$(aws s3 ls s3://minhapasta/arquivos | grep .txt | awk '{print $4}' | head -1)

cont=1

while [[ $cont -le $quantArqui]]; do

echo "$arquivo"
let cont=cont+1

done

o problema é que eu não estou conseguindo, pois ele pega somente o primeiro arquivo.

Já tenteei assim:

#!/bin/bash

quantArqui=$(aws s3 ls s3://minhapasta/arquivos | grep .txt -c) #quantidade de arquivos
arquivo=$(aws s3 ls s3://minhapasta/arquivos | grep .txt | awk '{print $4}' | head -1)

cont=1

while [[ $cont -le $quantArqui]]; do

echo "$arquivo"
let cont=cont+1

done < $arquivo

tabém não vai!

Alguém pode me dar um help?


  


2. Re: laço while

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/09/2020 - 16:58h

lacerdat25 escreveu:

quero listar todos os arquivos que tenho num S3 um por um, linha usando um laço para realizar uma comparação arquivo por arquivo.

#!/bin/bash

quantArqui=$(aws s3 ls s3://minhapasta/arquivos | grep .txt -c) #quantidade de arquivos
arquivo=$(aws s3 ls s3://minhapasta/arquivos | grep .txt | awk '{print $4}' | head -1)

cont=1

while [[ $cont -le $quantArqui]]; do

echo "$arquivo"
let cont=cont+1

done

o problema é que eu não estou conseguindo, pois ele pega somente o primeiro arquivo.

Já tenteei assim:

#!/bin/bash

quantArqui=$(aws s3 ls s3://minhapasta/arquivos | grep .txt -c) #quantidade de arquivos
arquivo=$(aws s3 ls s3://minhapasta/arquivos | grep .txt | awk '{print $4}' | head -1)

cont=1

while [[ $cont -le $quantArqui]]; do

echo "$arquivo"
let cont=cont+1

done < $arquivo

tabém não vai!

Alguém pode me dar um help?

Boa tarde Lacerda.
desconheço o "aws"....
Mas, o erro está em:
arquivo=$(aws s3 ls s3://minhapasta/arquivos | grep .txt | awk '{print $4}' |  head -1) 

head -n1, pega somente a 1ª linha......
Se, com o comando abaixo, a var arquivo tiver todos arqs ".txt", um arquivo por linha,
deve funcionar.....
#!/bin/bash
quantArqui=$(aws s3 ls s3://minhapasta/arquivos | grep -c ".txt") #quantidade de arquivos
arquivo=$(aws s3 ls s3://minhapasta/arquivos|awk '/txt$/ {print $4}')
cont=1
while read line; do
echo "Arq. Nº ${cont} ${line}"
let cont++
done < "$arquivo"

Ou
arquivo=$(aws s3 ls s3://minhapasta/arquivos|awk '/txt$/ {print $4}')
nl -n rz -w2 -s ' ' <<< $arquivo

Ou ainda...
aws s3 ls s3://minhapasta/arquivos|awk '/txt$/ {printf "%03d %s\n" ,NR,$4}'

Se não funcionar, poste a saída de :
aws s3 ls s3://minhapasta/arquivos

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts