디렉토리 "재귀" 마지막 수정 날짜

디렉토리 "재귀" 마지막 수정 날짜

디렉터리에서 마지막으로 수정된 파일의 타임스탬프를 가져오고 출력 형식을 지정하는 Linux bash의 명령이나 함수를 알고 싶습니다.

/path/mydir이 있고 이 디렉토리에 많은 파일이 있다고 가정합니다. 경로가 지정된 가장 최근에 수정된 파일의 타임스탬프를 출력하고 싶습니다.

프로세스가 foreach 파일을 재귀적으로 실행하고, 모든 파일을 확인하고, 업데이트된 변수를 찾을 때마다 최신 시간으로 변수를 업데이트할 수 있을 것 같습니다.

편집: 혼란을 드려 죄송합니다. 하지만 에포크 타임스탬프를 사용하고 싶었습니다. :)

답변1

한 가지 옵션: GNU find를 사용하여 모든 파일을 반복적으로 반복하여 타임스탬프와 파일 경로를 인쇄하고 날짜별로 정렬합니다.

find /path/mydir -type f -printf "%T+\t%p\n" | sort | tail -1

에포크 타임스탬프에만 해당됩니다.

find /path/mydir -type f -printf "%T@\n" | sort | tail -1

답변2

반면그리고문제의 태그와 "linux bash" 사양은 다음과 같습니다. 특정 디렉터리 구조에서 가장 최근에 수정된 파일의 파일 이름과 타임스탬프를 출력하는 bash 관련 함수는 다음과 같습니다.

function lastmodified () (
  shopt -s globstar
  latest=
  t=0
  for f in "$1"/**
  do
    x=$(stat -c "%Y" "$f")
    if [ $x -gt $t ]
    then
      latest="$f"
      t="$x"
    fi
  done
  printf "%s\n" "$latest"
  printf "%s\n" "$(date -d @${t})"
)

다음과 같이 사용하세요: lastmodified /path/mydir.

격리하기 위해 서브셸에서 실행됩니다.globstar 쉘 옵션그리고 다양한 변수 할당. 관심 있는 데이터를 캡처하려면 printf 문을 변경하거나 제거하세요.

작동 방식은 bash에게 $1주어진 매개변수 아래의 모든 파일 이름 경로를 확장하도록 요청한 다음 다음을 사용하여 "마지막 수정 시간(에포크 이후 초)"을 확인하는 것 입니다.통계자료주문하다. 최신 파일 이름은 으로 끝나고 $latest타임스탬프는 으로 끝납니다 t.

답변3

확실하게 하다다루기 힘든설치됨(모든 주요 배포판용 패키지)

zsh -c 'ls -log **/*(.om[1])' | awk '{print $4, $5, $6}'

**/*와일드카드 패턴하위 디렉터리의 모든 파일을 반복적으로 일치 (.om[1])시키며글로벌 예선일반 파일( .)로 일치를 제한하려면 수정 시간을 기준으로 정렬하고( om) 가장 최근 파일만 유지합니다( [1]). Glob 한정자는 zsh의 고유한 기능이며 대부분의 기능(특히 정렬)은 다른 셸에서 재현하기 어렵습니다.

.일반적으로 필요한 일반 파일만 포함했습니다. 그러나 예를 들어 파일이 마지막으로 삭제된 시간을 타임스탬프에 반영하려면 한정자를 제거하는 것이 좋습니다.

--time-styleGNU ls에는 시간 형식을 제어하는 ​​옵션( )이 있습니다 . 시간 형식에 따라 시간 필드를 추출하기 위해 사후 처리를 조정해야 할 수도 있습니다.

stat또는 Linux 명령을 사용하거나zsh stat내장원하는 형식으로 타임스탬프를 인쇄합니다.

zsh -c 'zmodload zsh/stat; stat +mtime -- **/*(.om[1])'

답변4

find . -type f -exec ls -ltr {} \; | awk '{print $6"-"$7"-"$8" "$9}' | sort -k3 | sort -nr | head -1

출력 형식은Month-date-hour-minute filename

Dec-30-03:10 ./1

올해 파일이 생성되었으므로 연도가 표시되지 않습니다. 항상 연도를 표시하려면 연도가 항상 표시되도록 코드를 수정하면 됩니다.

관련 정보