comando para unir uma série de arquivos juntos

3

Eu tenho ...

me@computer:~/gutenberg/euclid$ ls

book01.html book04.html book07.html book10.html book13.html book02.html book05.html book08.html book11.html book03.html book06.html book09.html book12.html

e eu quero juntar todos esses arquivos .html no mesmo arquivo grande, em ordem. Qual comando ou sequência de comandos posso usar?

    
por ixtmixilix 23.05.2011 / 02:01

4 respostas

2

Neste caso em particular, cat book??.html > book.html funcionará bem, se você não se importar com o formato HTML adequado.

Para um caso mais geral, digamos que você tenha "book1.html" em vez de "book01.html", "book2.html" em vez de "book02.html" e assim por diante. Os nomes dos arquivos não classificam lexicalmente da mesma forma que logicamente. Você pode fazer algo assim:

(echo book?.html | sort; echo book??.html | sort) | xargs cat > book.html

Então, em geral: script_generating_file_names_in_order | xargs cat > all_one_file

Esse idioma pode percorrer um longo caminho.

    
por 23.05.2011 / 05:41
2

Eu compro as observações sobre cabeça / cauda e tenho uma solução, classificada por número sem esse material xargs / sort / echo.

cat book{01..12}.html book-all.html
    
por 23.05.2011 / 06:42
1

Se você usar a classificação GNU, poderá usar sort -V para classificar os nomes na ordem correta:

$ echo -e "book4\nbook2\nbook17\nbook12" | sort -V
book2
book4
book12
book17

Isso funciona para qualquer número de arquivos:

ls book*.html | sort -V | xargs cat > allbooks.html
    
por 23.05.2011 / 09:23
0

A solução simples provavelmente funcionará se o seu navegador for permissivo.

cat book[0-9]*.html > book.html

Claro que você poderia distribuir material para ser um pouco mais legal:

perl -e 'undef($/); for($x=0;$x<=$#ARGV;$x++) { open(X,"<",$ARGV[$x]); $_ = <X>; close(X); s/.*<body[^>]*>//s unless ($x == 0);  s|</body>|| unless ($x == $#ARGV); print;' book[0-9]*.html > book.html

Mas isso não é garantia de que você realmente terá tudo o que precisa também, se os capítulos tiverem estilos diferentes ou javascript ou o que for.

    
por 23.05.2011 / 02:50