Linux encontrar exec - saída para um diretório diferente

1

Estou tentando criar um script curto para editar alguns arquivos csv. Primeiro, preciso substituir os delimitadores e, em seguida, alterar a codificação para UTF-16. Eu gostaria de fazer isso em duas etapas, salvando os resultados em duas pastas diferentes, caso algo dê errado.

O primeiro passo (substituindo os delimitadores) eu consegui resolver assim e funciona bastante bem:

mkdir ./01_delimiters
find .  -maxdepth 1 -type f -name '*.csv' -exec bash -c 'sed -e "s/|/¦/g" -e "s/╬/|/g" "{}" > ./01_delimiters/"{}"' \;

Agora eu gostaria de pegar todos os arquivos da pasta 01_delimiters, mudar sua codificação e salvá-los em uma pasta ./02_encoding. Eu tentei várias versões dos seguintes, mas não funciona:

mkdir ./02_encoding
find ./01_delimiters -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ./02_encoding/"{}"' \;

Ele encontra os arquivos corretamente, mas lança um erro 'Nenhum arquivo ou diretório' para a saída. Alguma idéia de como fazer isso funcionar? Eu estou usando o Ubuntu, a propósito. Muito obrigado antecipadamente!

Dan

    
por Dan 10.10.2018 / 11:14

1 resposta

0

O {} é substituído pelo caminho completo. Isso funciona no primeiro comando, porque lá o caminho é apenas ./file.csv . No segundo comando, o nome é ./01_delimiters/file.csv , então ele tenta criar ./02_encoding/./01_delimiters/file.csv .

Você pode

  • mkdir /02_encoding/./01_delimiters , seus arquivos de saída serão colocados nesse diretório.
  • Combine as duas operações em uma só depois de verificar se a primeira está funcionando. Mesmo que algo esteja errado, você não excluiu os arquivos originais.
  • Altere o segundo comando para

    (cd ./01_delimiters; find . -maxdepth 1 -type f -name '*.csv' -exec bash -c 'iconv -f utf-8 -t utf-16BE "{}" > ../02_encoding/"{}"' \; )
    
  • Use apenas o shell

    for file in *.csv; do
      sed -e "s/|/¦/g" -e "s/╬/|/g" "$file" > "./01_delimiters/$file"
      iconv -f utf-8 -t utf-16BE "./01_delimiters/$file" > "./02_encoding/$file"
    done
    
por 10.10.2018 / 11:43