私は持っています...
私@コンピュータ:〜/グーテンベルク/ユークリッド$ 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
これらすべての.htmlファイルを順番に同じ大きなファイルに結合したいと思います。どのコマンドまたはコマンドシーケンスを使用できますか?
答え1
この特別なケースでは、cat book??.html > book.html
正しいHTML形式を気にしないと正常に動作します。
より一般的なケースでは、「book01.html」の代わりに「book1.html」、「book02.html」の代わりに「book2.html」などがあるとします。ファイル名の語彙順序は論理順序とは異なります。次のことができます。
(echo book?.html | sort; echo book??.html | sort) | xargs cat > book.html
したがって、一般的に:script_generating_file_names_in_order | xargs cat > all_one_file
このイディオムは長い道のりを進むことができます。
答え2
私はhead / tailに関するコメントを聞き、xargs / sort / echoエントリなしで数字で並べ替えるソリューションを持っています。
cat book{01..12}.html book-all.html
答え3
GNUソートを使用している場合は、次のようにsort -V
名前を正しい順序でソートできます。
$ echo -e "book4\nbook2\nbook17\nbook12" |ソート-V 本2 第4巻 第12巻 第17巻
これはファイル数に関係なく機能します。
ls book*.html | sort -V | xargs cat > allbooks.html
答え4
ブラウザで許可されている場合は、簡単な解決策が機能する可能性があります。
cat book[0-9]*.html > book.html
もちろん、より合法的にするために周囲のものを削除することもできます:
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
ただし、各章のスタイルが異なる場合やJavaScriptなどが異なる場合、必要なものがすべてあるという保証はありません。