일련의 파일을 함께 연결하는 명령

일련의 파일을 함께 연결하는 명령

나는 가지고있다...

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

관련 정보