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


18

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

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

답변:


33

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

cat file1 file2 file3 ...

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

ls -t

함께 모아서,

cat $(ls -t) > outputfile

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

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