Como posso concatenar todos os arquivos em um diretório juntos em uma operação de linha de comando? [duplicado]

15

Eu tenho 1000 arquivos csv em um diretório. Eu gostaria de concatenar todos juntos em ordem. Eles são chamados de img_size_1.csv para aproximadamente img_size_1000.csv Esta resposta está próxima, mas pressupõe um arquivo de lista. Isso pode ser feito em um one-liner?

    
por codecowboy 05.02.2014 / 18:43

2 respostas

24

Sim, com o comando cat , sem imaginação, denominado:

$ cat *csv > all.csv

cat faz o que diz na garrafa, CONCATENA sua entrada e imprime na saída padrão. O comando acima dará um erro se um arquivo chamado all.csv já existir no diretório de destino:

$ cat *csv > all.csv
cat: all.csv: input file is output file

Você pode ignorar com segurança esse erro, o conteúdo de all.csv será sobrescrito. Aparentemente, em alguns sistemas (por exemplo, OSX de acordo com os comentários abaixo desta resposta), você não pode ignorar o erro e isso entrará em loop, colocando all.csv em si até ficar sem espaço em disco. Em caso afirmativo, basta excluir all.csv , se existir, antes de executar o comando.

    
por 05.02.2014 / 18:45
6
ls -1 *.csv | while read fn ; do cat "$fn" >> output.csv.file; done

Se você quiser concatená-los por ordem alfabética:

ls -1 *.csv | sort | while read fn ; do cat "$fn" >> output.csv.file; done

Se você quiser concatená-los por ordem de criação de tempo:

ls -1t *.csv | while read fn ; do cat "$fn" >> output.csv.file; done
    
por 05.02.2014 / 19:20