cat 디렉토리의 마지막 5개 파일

cat 디렉토리의 마지막 5개 파일

$date.txt 형식의 파일 이름을 가진 디렉터리가 있습니다. 그 중에서 최신 파일 5개를 찾고 싶습니다. 이보다 더 우아한 솔루션이 있습니까?

for f in 2*.txt; do echo $f; done | tail -5 | while read f; do cat $f; done

답변1

ksh93, 또는 :bashzsh

files=( 2*.txt )
cat "${files[@]: -5}"

그러면 패턴과 일치하는 파일 이름 배열이 생성됩니다 2*.txt. 그런 다음 마지막 5개의 내용을 인쇄합니다.

에서는 zsh파일 범위를 다음의 일부로 지정할 수도 있습니다.글로벌 예선:

cat 2*.txt([-5,-1])

모든 POSIX 셸에서 이 작업은 다음을 통해 수행할 수도 있습니다.

set -- 2*.txt
while [ "$#" -gt 5 ]; do shift; done   # or: [ "$#" -gt 5 ] && shift "$(( $# - 5 ))"
cat "$@"

이는 위치 인수를 패턴과 일치하는 파일 이름으로 설정합니다. 그런 다음 목록에 요소가 5개만 남을 때까지 목록의 시작 부분에서 이름을 이동합니다. cat그런 다음 나머지 파일 이름에 대해 호출합니다.

이러한 모든 솔루션에서 파일은 사전순으로 정렬됩니다. 공백이나 줄바꿈이 포함된 파일 이름은 올바르게 처리됩니다.

답변2

공백이 있는 파일을 처리하는 while read 루프를 사용하겠습니다.

ls 2*.txt | tail -5 | while read loop
do
  cat "$loop" 
done 

항상 최신 5개를 원하면 다음과 같이 변경할 수 있습니다.ls -tr | tail -5

답변3

이 질문에 따르면 공백이 없고 2*.txt가 올바른 순서를 반환하는 데 좋을 것입니다.

cat $(ls 2*.txt|tail -5)

답변4

latest질문에서 언급했듯이 디렉토리에 있는 파일의 수정 시간을 확인할 수 있습니다 .

 cat $(ls -ltr *.txt | tail -n5 | awk '{print $NF}' | tr '\n' ' ')
  • ls -ltr- 수정 타임스탬프와 관련하여 파일을 나열합니다(역방향).

  • tail -n5- 마지막 5개 파일을 가져옵니다.

  • $NF- 마지막 필드

  • tr- 열을 행으로 바꾸기

관련 정보