Como posso ler o conteúdo de vários arquivos?

0

Eu preciso ler o conteúdo de vários arquivos, por enquanto eu posso ler o conteúdo de apenas um arquivo usando o código abaixo, este código lê o conteúdo presente em "rules1.txt" usando "strings". Eu só preciso da mesma funcionalidade, mas com vários arquivos para ler em "apps.txt".

for i in $(cat apps.txt);
do    
cd /local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/$i
echo $i >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt     done
for i in $(ls *.rul);do
echo $i  >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt      
strings $i  >> /data/shellscripts/essbase/Operate/Overlays/rules.txt
    
por user3851659 11.06.2018 / 09:09

2 respostas

1

Não leia todo o arquivo apps.txt em um loop for . No caso geral, isso poderia causar problemas de memória se o arquivo fosse grande, e causaria problemas se algum nome de arquivo em apps.txt tivesse espaços neles. Não faça um loop pela saída de ls . Além disso, cite expansões de variáveis e use printf para gerar dados variáveis.

Relacionados:

Sugestão:

#!/bin/sh

appdir='/local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app'
outdir='/data/shellscripts/essbase/Operate/Overlays'

while IFS= read -r app; do
    printf '%s\n' "$app"
    for name in "$appdir/$app"/*.rul; do
        printf '%s\n' "${name##*/}"
        strings "$name"
    done
done <apps.txt >"$outdir/rules1.txt"

Isso leria app do arquivo apps.txt e acessaria todos os arquivos *.rul no subdiretório correspondente em $appdir . As seqüências de caracteres $app e ${name##*/} (o nome de base do arquivo *.rul atual) seriam produzidas em cada iteração, junto com a saída de strings . A saída iria para o arquivo $outdir/rules1.txt .

Também relacionado (à minha solução):

por 11.06.2018 / 09:37
0

Desta postagem: link

while read i  ; do
    cd /local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServe/essbaseserver1/app/$i
    echo $i >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt
done < apps.txt    

Embora seja mais adequado do que para esta tarefa.

    
por 11.06.2018 / 09:24