Como gravar a saída em um arquivo com o mesmo nome da entrada?

1

Eu estou querendo saber como processar arquivos de alguma pasta dir1 se eles são canalizados através de várias tarefas e no final eu gostaria que a saída seja escrita na mesma estrutura de pastas e nomes de arquivos, ou seja, eu tenho 2 arquivos ; dir1 / file1 e dir1 / file2. Eu quero o seguinte comando:

task1 dir1/* | task2 | task3 --output dir2/${filename}

para a saída dir2 / file1 e dir2 / file2, que deve representar os arquivos processados.

    
por Ashley 15.03.2017 / 13:33

2 respostas

3

Faça um loop sobre os arquivos em dir1 , obtenha o nome de cada arquivo, processe-o, escreva para o arquivo de saída:

for path in dir1/*; do
    name="${path##*/}"
    task1 "$path" | task2 | task3 --output "dir2/$name"
done

A substituição de variável ${path##*/} assumirá o valor da variável path e removerá tudo até (e incluindo) o último / . Isso produz o nome de base do arquivo.

task1 é então executado no arquivo em dir1 , o resultado é passado para task2 e a saída disso é dada para task3 . A última tarefa usa dir/$name como operando para sua opção --output .

    
por 15.03.2017 / 13:58
0
cd "dir1" && \
find . -maxdepth 1 -type f -exec sh -c '
   # task2 on "$1" | task3  > "/path/to/dir2/${1##*/}
' {} {} \;
    
por 15.03.2017 / 13:40