나는 가지고있다...
나@컴퓨터:~/구텐베르그/유클리드$ 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 등이 다른 경우 필요한 모든 것이 실제로 있다는 보장은 없습니다.