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


18

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

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

답변:


33

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

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

두 번째 질문은 파일의 일부를 필터링하는 것이 어렵지 않지만 정확히 제거하려는 항목에 따라 다릅니다. “중복 헤더”란 무엇입니까?


이것은 내 데비안 시스템에서 작동하지 않습니다 ... 사용해야합니다 cat $(ls -t) > outputfile, 그렇지 않으면 cat인용 파일 이름을 거부합니다
— Mike Pennington

1
내 실수. 나는 항상 이런 것들에 사로 잡 힙니다. 업데이트 된 답변을 참조하십시오.
— angus

아, 중복 헤더는 일반적으로 일부 header.php / footer.php 파일에 저장되지만 HTML에 저장할 때 별도로 저장되는 것을 의미합니다 (PHP 페이지를 대량 다운로드 할 때 파일 크기를 실제로 늘릴 수 있음).
— InquilineKea

cat $(ls -t)또한 파일 이름 확장에 취약합니다. *, 또는 ?, 또는 괄호 표현식 (예 :) 이있는 파일 이름이있는 경우 file-[old].html; 패턴으로 해석 된 파일 이름이 다른 파일 이름과 일치하는 경우 이 접근법은 잘못된 목록을 생성합니다. set -f이 결함을 해결할 것입니다.
— 맨발 IO

ls -Q에 적합하지 않은 출력을 생성 할 수 있습니다 xargs. 예를 들어, "foo"는 "\"foo\""이지만 xargs는 큰 따옴표로 묶인 문자열 내 이스케이프 된 큰 따옴표를 이해하지 못합니다.
— Barefoot IO

2

사전 식 이외의 순서로 파일을 나열하는 가장 쉬운 방법은 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>.
  • 마지막으로 마지막 닫는 태그를 생성하십시오.

1

@angus가 제공 한 솔루션은 좋지만 폴더에 디렉토리가 있으면 문제가 발생합니다.

cat $(ls -tpa | grep -v / )


주의 사항 :이 답변은 또한 앵거스의 답변에 대한 나의 의견에서 설명한 것처럼 경로 이름 확장에 취약합니다.
— 맨발 IO

cat의 종료 상태가 테스트되지 않는 한 디렉토리 인수는 중요하지 않습니다. cat은 단순히 stderr에게 메시지를 보내고 다음 인수로 진행합니다.
— 맨발 IO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.