Saída de arquivos em subdiretórios

0

Eu quero executar um egrep para vários padrões diferentes em uma pasta cheia de textos e gerar os resultados nas pastas correspondentes. Eu também estou tentando deixar isso claro e conciso, pois este é um fluxo de trabalho que provavelmente usarei muito.

Portanto, tenho uma pasta cheia de textos chamada docs e quero encontrar dois padrões de regex diferentes (regex1 e regex2) e enviá-los para docs/regex1 e docs/regex2

Eu acho que algo assim funcionaria

mkdir {docs/regex1,docs/regex2}
for file in docs/*
do
    egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
    egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
done

Isso me dá o erro:

regex1/docs/001_regex1.txt: No such file or directory
regex2/docs/001_regex2.txt: No such file or directory

Para cada arquivo. Como posso definir a saída em docs / regex1 em vez de tentar ir para regex1 / docs?

    
por user3128184 17.06.2017 / 02:25

1 resposta

1

No seu script de exemplo, você tem:

egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt

Mas então você pergunta:

For each file. How can I set the output do go into docs/regex1 instead of trying to go to regex1/docs?

Você está explicitamente colocando regex1 no início do caminho para o qual está redirecionando a saída. Basta corrigir isso para corresponder ao que você deseja e remover o caminho à esquerda de $file :

egrep -o -f regex1 "$file" > docs/regex1/"$( basename "${file%.*}" )"_regex1.txt
egrep -o -f regex2 "$file" > docs/regex2/"$( basename "${file%.*}" )"_regex2.txt
    
por 17.06.2017 / 08:18