가장 오래된 파일이 맨 아래에 있습니까?
또한이 작업을 수행하면 각 HTML 파일에 포함 된 중복 헤더를 제거 할 수도 있습니까? 나는 많은 HTML 파일을 연결하고 있으며 궁극적 인 파일의 파일 크기를 조금 줄이는 것이 좋을 것입니다.
답변
사용하는 파일을 연결하려면
cat file1 file2 file3 ...
인용 된 파일 이름 목록을 시간순으로 정렬하려면 최신을 사용하십시오.
ls -t
함께 모아서,
cat $(ls -t) > outputfile
ls
(예 :)에 몇 가지 인수를 제공 할 수 있습니다 *.html
.
그러나 파일 이름에 공백이 있으면 작동하지 않습니다. My file.html
는 두 개의 파일 이름 인 것으로 가정합니다 : My
및 file.html
. ls
파일 이름 을 인용 한 다음 xargs
인용을 이해하는 을 사용 하여 인수를에 전달할 수 cat
있습니다.
ls -tQ | xargs cat
두 번째 질문은 파일의 일부를 필터링하는 것이 어렵지 않지만 정확히 제거하려는 항목에 따라 다릅니다. “중복 헤더”란 무엇입니까?
답변
사전 식 이외의 순서로 파일을 나열하는 가장 쉬운 방법은 zsh glob 한정자를 사용하는 것 입니다. zsh가 없으면 사용할 수 ls
있지만 출력을 구문 분석하면 ls
위험이 따릅니다 .
cat *(om)
일부 줄을 제거하려면 sed 또는 awk 또는 perl을 사용하십시오. 예를 들어, 및 태그가 모든 파일에서 한 줄에 있다고 가정하면 <head>
첫 번째 파일에서 from 을 가져 와서 <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>
. - 마지막으로 마지막 닫는 태그를 생성하십시오.
답변
@angus가 제공 한 솔루션은 좋지만 폴더에 디렉토리가 있으면 문제가 발생합니다.
cat $(ls -tpa | grep -v / )