최신 디렉토리를 원하는 곳에서 지정된 디렉토리의 모든 파일을 날짜순으로 어떻게 연결합니까? 포함 된 중복 헤더를

가장 오래된 파일이 맨 아래에 있습니까?

또한이 작업을 수행하면 각 HTML 파일에 포함 된 중복 헤더를 제거 할 수도 있습니까? 나는 많은 HTML 파일을 연결하고 있으며 궁극적 인 파일의 파일 크기를 조금 줄이는 것이 좋을 것입니다.



답변

사용하는 파일을 연결하려면

cat file1 file2 file3 ...

인용 된 파일 이름 목록을 시간순으로 정렬하려면 최신을 사용하십시오.

ls -t

함께 모아서,

cat $(ls -t) > outputfile

ls(예 :)에 몇 가지 인수를 제공 할 수 있습니다 *.html.

그러나 파일 이름에 공백이 있으면 작동하지 않습니다. My file.html는 두 개의 파일 이름 인 것으로 가정합니다 : Myfile.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 / )


답변