특정 디렉토리의 모든 파일을 날짜 순서대로 연결하려면 어떻게 해야 합니까? 최신 파일이 맨 위에 오도록 하시겠습니까?

특정 디렉토리의 모든 파일을 날짜 순서대로 연결하려면 어떻게 해야 합니까? 최신 파일이 맨 위에 오도록 하시겠습니까?

가장 오래된 파일은 맨 아래에 있나요?

그리고 이렇게 하면 각 HTML 파일에 포함된 중복된 헤더도 제거할 수 있나요? 여러 HTML 파일을 연결하는 모습을 보니 최종 파일의 파일 크기를 조금 줄일 수 있으면 좋을 것 같습니다.

답변1

사용하는 파일을 연결하세요

cat file1 file2 file3 ...

참조된 파일 이름의 시간순 목록을 최신 항목부터 얻으려면 다음을 사용할 수 있습니다.

ls -t

함께 찍은,

cat $(ls -t) > outputfile

ls(예 : )에 대한 *.html일부 매개변수를 제공 할 수 있습니다 .

하지만 이 방법은 파일 이름에 공백이 포함되어 있으면 작동하지 않습니다. My file.html두 개의 파일 이름으로 간주됩니다: 파일 이름을 인용한 다음, MyUnderstanding -quoted 를 사용하여 인수를 전달할 file.html수 있습니다 .lsxargscat

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 / )

관련 정보