bash processa arquivos com caracteres ruins

1

Recebi um arquivo zip com uma estrutura de pastas que inclui parênteses. Eu trabalhei através de dois processos no cli e agora mesclá-los em um script

A primeira busca através da estrutura de arquivos para arquivos específicos corrigindo os parênteses, em seguida canaliza para tshark para processar. minha saída usando sed funciona no stoud mas o pipe tshark não gosta do caminho que estou jogando.

find <path> -iname *.cap |sed 's/(/\(/' |sed 's/)/\)/'

pega pasta / pasta (descrição) /file.cap resulta em pasta / pasta (descrição) /file.cap legal!

quando eu adiciono isso a um script bash

#/BIN/BASH

capfiles=($(find <path> -iname *.cap | sed ’s/(/\(/‘ |sed ’s/)/\)/‘))

for i in “${capfiles[@]}”;do
     tshark -r $i -T fields -e dns.qry.name |sort u > $i.uniquefqdns2lookup.txt

done

Eu obtenho

'tshark: The file "folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file folder/folder\(description\)/file.cap" doesn't exist. 

Eu tentei brincar com ./ no patch como um personagem explícito sem sorte. essa saída se parece com:

'tshark: The file "./"folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist.
'tshark: The file "./folder/folder\(description\)/file.cap" doesn't exist. 

O que estou perdendo? Eu estou totalmente fora com isso?

    
por carter 23.12.2014 / 16:10

1 resposta

0

Além do comentário de KasiyA,

  • Verifique se as suas cotações estão no caminho certo. Na sua pergunta, os padrões sed são mostrados terminando com um backquote (') em vez de uma cotação de avanço ('). Não sei se esse é realmente o caso do seu roteiro.
  • Coloque o $i entre aspas duplas ( "$i" ) (consulte esta resposta ).
  • Você pode realmente não precisar das barras invertidas, dependendo das configurações do tshark. Usar "$i" preservará os parênteses em seu nome de arquivo. Tshark provavelmente está procurando por um arquivo com o literal \ no nome. Experimente

    capfiles=($(find <path> -iname *.cap )
    

e veja o que você recebe.

    
por 23.12.2014 / 17:03