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

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

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

또한 이렇게 하면 각 HTML 파일에 포함된 중복 헤더를 제거하는 것도 가능합니까? 나는 많은 HTML 파일을 연결하는 것을 보고 있는데 최종 파일의 파일 크기를 조금 줄이는 것이 좋을 것입니다.

답변1

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

cat file1 file2 file3 ...

시간별로 최신순으로 정렬된 인용된 파일 이름 목록을 얻으려면 다음을 사용합니다.

ls -t

함께 모아서,

cat $(ls -t) > outputfile

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

그러나 공백이 포함된 파일 이름이 있으면 작동하지 않습니다. My file.html두 개의 파일 이름으로 간주됩니다: Myfile.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 / )

관련 정보