Concatenando arquivos de vários subdiretórios

5

Digamos que eu tenha uma estrutura de diretórios com esta aparência:

file1.txt
folder1/
    file2.txt
folder2/
    file3.txt

Como posso concatenar file1.txt, file2.txt e file3.txt em um único arquivo?

Edit: esta estrutura de diretórios é apenas um exemplo. A questão é sobre como concatenar arquivos de subpastas, considerando qualquer estrutura de diretório e qualquer número de arquivos.

    
por Joe Mornin 30.08.2011 / 22:25

5 respostas

2

Consegui o seguinte para funcionar no Mac OS X:

find . -type f -exec cat {} > ../results.txt \;

No entanto, não entendo completamente por que funciona, por isso seria útil se alguém pudesse explicar.

    
por 08.09.2011 / 17:26
8
cat file1.txt folder1/file2.txt folder2/file3.txt > single.txt
    
por 30.08.2011 / 22:30
4

De qual sistema operacional estamos falando?

Assumindo o Windows, use os seguintes comandos (substituindo file / foldernames conforme necessário):

C:\> ren > TARGET.TXT 2> nul
C:\> cd MyFolder
C:\MyFolder> for /R %i in (*) do copy /b \TARGET.TXT + "%i" \TARGET.TXT

A primeira linha cria (ou apaga) o arquivo C:\TARGET.TXT usando comandos internos. O terceiro comando recursa em todos os arquivos no diretório atual e em seus subdiretórios e os anexa ao arquivo de destino (observe que ele não incluirá arquivos ocultos). Ele usa a opção /b para copiá-los em formato binário, no caso de alguns arquivos não serem apenas texto simples.

    
por 05.09.2011 / 22:06
3

copy /y file1.txt+folder1\file2.txt+folder2\file.txt destination.txt deve fazer o truque

FYI, o /y desativa a solicitação

    
por 30.08.2011 / 22:30
2

Supondo que você queria todos os arquivos em todos os subdiretórios, ou que há algum identificador pesquisável distinto, acabei de fazer o seguinte funcionar. Observe que neste exemplo eu estava usando uma porta dos comandos unix find e cat portados para um sistema Windows. Eu não sei quantos anos essa porta do Windows em particular é tão quilometragem pode variar.

find . -type f -exec cat {} ; | cat > bigfile.txt

Ao usar o Ubuntu 10.10 e o shell bash, descobri que a sintaxe a seguir funcionava melhor, porque encontrar bigfile.txt "encontrado", se ele fosse criado no caminho de pesquisa e porque certas partes do comando precisavam ser escapadas. Observe que as diferenças entre essa porta e a porta do Windows são as aspas simples ao redor dos colchetes, uma barra invertida antes do ponto-e-vírgula e a criação do diretório de um diretório do container.

find . -type f -exec cat '{}' \; | cat > ../bigfile.txt
    
por 31.08.2011 / 15:27