![디렉토리 "재귀" 마지막 수정 날짜](https://linux55.com/image/124563/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%22%EC%9E%AC%EA%B7%80%22%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%88%98%EC%A0%95%20%EB%82%A0%EC%A7%9C.png)
디렉터리에서 마지막으로 수정된 파일의 타임스탬프를 가져오고 출력 형식을 지정하는 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-style
GNU 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
올해 파일이 생성되었으므로 연도가 표시되지 않습니다. 항상 연도를 표시하려면 연도가 항상 표시되도록 코드를 수정하면 됩니다.