Use cat
com o redirecionamento de saída. Sintaxe: cat file [file] [[file] ...] > joined-file
.
Exemplo com apenas dois arquivos (você pode ter muitos mais):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
Caso você tenha "muitos documentos", faça uso de globbing de shell (padrões):
cat input-files-dir/* > joined-file
Isso unirá todos os arquivos desse diretório ao diretório atual (impedindo que ele corresponda ao próprio arquivo de saída). É totalmente independente do uso cat
e redirecionamento de saída - é apenas o Bash fornecendo todos os arquivos como argumentos cat
.
Tipos de arquivo
Ele apenas cola (une) arquivos como faria com papel e fita. Ele não se importa com o formato de arquivo real capaz de lidar com isso. Ele funcionará para arquivos de texto, mas não para PDFs, ODTs etc. Bem, ele será colado, mas não é mais um PDF / ODT válido.
Ordem de adesão
Como phoibos apontou, o globbing do shell resultará em ordem alfabética dos nomes dos arquivos. É assim que o Bash e o shell globbing funcionam.
Adendo sobre input file is output file
erro
Quando o padrão dos arquivos de entrada corresponder ao mesmo arquivo que está sendo produzido, isso causará um erro. É um recurso de segurança. Exemplo: cat *.txt > out.txt
executar a segunda vez causará isso.
O que você pode fazer sobre isso:
- Escolha um padrão mais específico para corresponder aos arquivos de entrada reais, não correspondendo ao nome da saída. Exemplo: o padrão dos arquivos de entrada
*.txt
com o arquivo de saída output.out
não colidirá.
- Trabalhe em diretórios diferentes. No exemplo acima, usei um
input-files-dir
diretório separado para colocar todos os arquivos e enviar para o diretório de trabalho atual. Isso torna impossível obter esse erro.
ls
apenas para listar as correspondências. Por exemplo,ls *.txt
para ver o que está sendo correspondido.Uma maneira simples de fazer isso é usando cat:
Se você apenas emitir,
cat file1 file2
verá os dois arquivos na saída padrão. Ao usar>
, você está apenas redirecionando a saída padrão para um arquivo. Isso funcionará também com outros comandos.fonte
Faça isso com um loop simples:
>>
anexa ao arquivo.Nota: Se, por algum motivo, você precisar executar o comando novamente, precisará removê-lo
complete.txt
; caso contrário, você gravará o arquivo nele mesmo, o que não funcionará.fonte
cat
.cat *.txt
. O loop for deve ser classificado.for
no Bash ou em qualquer outro lugar.Se os arquivos que você deseja combinar terminarem
.txt
, mantenha-o simples:Se o diretório contiver apenas arquivos de texto, também é simples:
(Observe que, uma vez criado
combined.txt
, fazê-lo novamente incluiria na expansão de*
, levando a um comportamento estranho).Se você deseja selecionar alguns arquivos no diretório e não outros, é melhor que os nomes de arquivos permitam distinguir quais você deseja. Caso contrário, você pode se interessar
find
. Mas duvido que você precise ir tão longe.fonte
O script de ação personalizado da Thunar, escrito por cipricus, também me inspirou a escrever um script semelhante do Nautilus, e achei que poderia ser útil para outras pessoas que consultam estas perguntas e respostas para obter referências sobre esse assunto. Então aqui está:
fonte
Este é um complemento e uma variação para as outras respostas, relacionadas a colocar essas soluções em ação nas ações dos costumes de Thunar.
Nem todos eles são utilizáveis dessa maneira, mas alguns são.
Eu pensei que o mais interessante seria poder mesclar arquivos selecionados no menu de contexto do Thunar .
Esta é uma variação do que foi sugerido por Sadi em um comentário para gertvdijk 's resposta :
Somente arquivos selecionados serão ingressados. Restrinja as condições de aparência aos arquivos de texto.
Um agradecimento especial a Sadi, cujo comentário me forneceu a solução mais clara e correta para o meu problema.
Eu aceitei gertvdijk 's resposta como definitiva. Não foi apenas a ocasião para o comentário de Sadi, mas parece ter mais valor para os outros, fornecendo uma solução bem argumentada e completa (embora um pouco acima das minhas habilidades de leitura do CLI).
fonte
Você pode tentar o
find
comando também,Ele encontra
.txt
arquivos dentro do diretório atual e executa ocat
comando em cada arquivo encontrado. Finalmente, toda a saída foi redirecionada para o nome do arquivofile
(criado diretamente dentro da corrente).Explicação:
fonte
Você também pode usar um utilitário on-line, como merge-files-online.com
fonte