답변:
사용하는 파일을 연결하려면
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)
또한 파일 이름 확장에 취약합니다. *
, 또는 ?
, 또는 괄호 표현식 (예 :) 이있는 파일 이름이있는 경우 file-[old].html
; 패턴으로 해석 된 파일 이름이 다른 파일 이름과 일치하는 경우 이 접근법은 잘못된 목록을 생성합니다. set -f
이 결함을 해결할 것입니다.
ls -Q
에 적합하지 않은 출력을 생성 할 수 있습니다 xargs
. 예를 들어, "foo"
는 "\"foo\""
이지만 xargs는 큰 따옴표로 묶인 문자열 내 이스케이프 된 큰 따옴표를 이해하지 못합니다.
사전 식 이외의 순서로 파일을 나열하는 가장 쉬운 방법은 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>
.
cat $(ls -t) > outputfile
, 그렇지 않으면cat
인용 파일 이름을 거부합니다