가장 오래된 파일은 맨 아래에 있나요?
그리고 이렇게 하면 각 HTML 파일에 포함된 중복된 헤더도 제거할 수 있나요? 여러 HTML 파일을 연결하는 모습을 보니 최종 파일의 파일 크기를 조금 줄일 수 있으면 좋을 것 같습니다.
답변1
사용하는 파일을 연결하세요
cat file1 file2 file3 ...
참조된 파일 이름의 시간순 목록을 최신 항목부터 얻으려면 다음을 사용할 수 있습니다.
ls -t
함께 찍은,
cat $(ls -t) > outputfile
ls
(예 : )에 대한 *.html
일부 매개변수를 제공 할 수 있습니다 .
하지만 이 방법은 파일 이름에 공백이 포함되어 있으면 작동하지 않습니다. My file.html
두 개의 파일 이름으로 간주됩니다: 파일 이름을 인용한 다음, My
Understanding -quoted 를 사용하여 인수를 전달할 file.html
수 있습니다 .ls
xargs
cat
ls -tQ | xargs cat
두 번째 질문의 경우 일부 파일을 필터링하는 것은 어렵지 않지만 정확히 삭제하려는 항목에 따라 다릅니다. "중복 헤더"란 무엇입니까?
답변2
사전순이 아닌 순서로 파일을 나열하는 가장 쉬운 방법은 zsh를 사용하는 것입니다.글로벌 예선. zsh 없이도 사용할 수 ls
있지만구문 분석된 출력 ls
에는 위험이 따릅니다..
cat *(om)
특정 줄을 삭제하려면 sed, awk 또는 perl을 사용하세요. 예를 들어 <head>
첫 번째 파일의 일부를 가져와 <body>
다른 파일에서 결합하려면 <body>
및 </body>
태그가 각 파일의 한 줄에 개별적으로 있다고 가정합니다.
{
sed -e '/<\/body>/ q' *.html(om[2])
sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
echo '</body>'
echo '</html>'
} >concatenated.html
설명하다:
- 먼저,
concatenated.html
생성됩니다. 따라서 가장 어린*.html
파일입니다(미래 날짜의 파일이 없다고 가정). - 그런 다음 두 번째로 작은
*.html
파일에서 복사하되 행에서 종료하십시오</body>
. - 그런 다음 다른 파일에서 복사하되 해당
<body>
줄 의 모든 항목을 건너뛰고</body>
해당 줄부터 시작합니다. - 마지막으로 마지막 닫는 태그를 생성합니다.
답변3
@angus가 제공한 솔루션은 훌륭하지만 폴더 내에 디렉터리가 있으면 문제가 발생하므로 해결됩니다.
cat $(ls -tpa | grep -v / )