답변:
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "
거대한 나무의 경우 sort
모든 것을 메모리에 보관하기 가 어려울 수 있습니다 .
%T@
유닉스 타임 스탬프와 같은 수정 시간을 제공하고, sort -n
숫자로 정렬 tail -1
하고, 마지막 라인 (가장 높은 타임 스탬프)을 취하고 cut -f2 -d" "
, 출력에서 첫 번째 필드 ( 타임 스탬프)를 잘라냅니다.
편집 : 것처럼 -printf
아마의 GNU 전용 ajreals 사용하다 stat -c
너무. BSD에서도 같은 작업을 수행 할 수 있지만 포맷팅 옵션이 다릅니다 ( -f "%m %N"
보여 질 것입니다)
그리고 나는 복수의 일부를 놓쳤다. 당신이 더 많은 그런 다음 원하는 경우 최신 파일을 바로 꼬리 인수를 범프.
sort -rn | head -3
대신 대신 사용 을 전환 할 수 있습니다 sort -n | tail -3
. 하나의 버전은 파일을 가장 오래된 것부터 가장 오래된 것으로, 다른 버전은 가장 오래된 것부터 가장 오래된 것까지 제공합니다.
sort
임시 파일 ( /tmp
)을 만들 것이므로 걱정하지 않아도됩니다.
-printf '%T@ %Tb %Td %TY %p\n'
날짜 스탬프를 제공합니다 (필요한 경우) (와 유사 ls
)
find . -type f -printf '%TF %TT %p\n' | sort | tail -1
@ plundra 's answer 다음에 BSD 및 OS X 버전이 있습니다.
find . -type f -print0 | xargs -0 stat -f "%m %N" |
sort -rn | head -1 | cut -f2- -d" "
find
지원 합니까? 파이프 없이 동일한 작업을 수행하기 때문에 (여러 파일을 매개 변수로 전달) . +
\;
-print0 | xargs -0
head -1
으로head -5
결과를 정렬하고 마지막으로 수정 된 결과 만 유지하는 대신 awk를 사용하여 수정 시간이 가장 큰 결과 만 인쇄 할 수 있습니다 (유닉스 시간).
find . -type f -printf "%T@\0%p\0" | awk '
{
if ($0>max) {
max=$0;
getline mostrecent
} else
getline
}
END{print mostrecent}' RS='\0'
파일 수가 충분하면 문제를 해결하는 가장 빠른 방법입니다.
이론적으로 파일 이름에는 공백과 줄 바꿈을 포함한 모든 문자가 포함될 수 있지만 NUL 문자 (예 : '\ 0')를 사용했습니다.
시스템에 병리학 적 파일 이름이 없으면 줄 바꿈 문자도 사용할 수 있습니다.
find . -type f -printf "%T@\n%p\n" | awk '
{
if ($0>max) {
max=$0;
getline mostrecent
} else
getline
}
END{print mostrecent}' RS='\n'
또한 이것은 멍청이에서도 작동합니다.
mawk
데비안 표준 대안 인에서는 작동하지 않습니다 .
나는이 솔라리스 10에서 마지막으로 수정 된 파일을 찾을 수있는 문제가 있었다 find
이없는 printf
옵션 및 stat
사용할 수 없습니다입니다. 나는 나에게 잘 맞는 다음 해결책을 발견했다.
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7 }' | sort | tail -1
파일 이름을 표시하려면
find . -type f | sed 's/.*/"&"/' | xargs ls -E | awk '{ print $6," ",$7," ",$9 }' | sort | tail -1
설명
find . -type f
모든 파일을 찾아서 나열합니다sed 's/.*/"&"/'
공백을 처리하기 위해 경로 이름을 따옴표로 묶습니다.xargs ls -E
에 인용 된 경로를 전송 ls
, -E
옵션은 풀 타임 스탬프 (형식 있는지 확인합니다 년 - 월 - 일시 - 분 - 초 - 나노초가 ) 반환awk '{ print $6," ",$7 }'
날짜와 시간 만 추출awk '{ print $6," ",$7," ",$9 }'
날짜, 시간 및 파일 이름 추출sort
날짜별로 정렬 된 파일을 반환합니다tail -1
마지막으로 수정 된 파일 만 반환하위 디렉토리에서도 잘 작동하는 것 같습니다.
find . -type f | xargs ls -ltr | tail -n 1
파일이 너무 많으면 찾기를 세분화하십시오.
-l
에 대한 옵션은 ls
불필요한 것 같다. 그냥 -tr
충분한 것 같다.
find . -type f -print0 | xargs -0 ls -ltr | tail -n 1
나는 가장 최근에 수정 된 파일의 최상위 k 목록뿐만 아니라 항상 비슷한 것을 사용합니다. 큰 디렉토리 트리의 경우 정렬을 피하는 것이 훨씬 빠릅니다 . 가장 최근에 수정 된 파일이 최상위 1 개인 경우 :
find . -type f -printf '%T@ %p\n' | perl -ne '@a=split(/\s+/, $_, 2); ($t,$f)=@a if $a[0]>$t; print $f if eof()'
170 만 개의 파일이 포함 된 디렉토리에서 정렬을 사용하여 25.5s 솔루션에 비해 7.5 배 빠른 3.4s의 최신 파일을 얻습니다.
lastfile
:), 결과를 사용하여 원하는대로 (예 : ls -l $(lastfile .)
, 또는 open $(lastfile .)
Mac에서) 수행 할 수 있습니다 .
우분투 13에서 다음은 정렬을 반대로하고 '꼬리'대신 '머리'를 사용하여 작업을 줄임으로써 다소 빠릅니다. 트리에서 11 개의 최신 파일을 표시하려면
찾기 . 유형 f -printf '% T @ % p \ n'| 정렬 -n -r | 머리 -11 | 컷 -f2- -d ""| sed -e 's, ^. / ,,'| xargs ls -U -l
이것은 재정렬없이 완전한 ls 목록을 제공하고 'find'가 모든 파일 이름에 넣는 성가신 './'를 생략합니다.
또는 bash 함수로 :
treecent () {
local numl
if [[ 0 -eq $# ]] ; then
numl=11 # Or whatever default you want.
else
numl=$1
fi
find . -type f -printf '%T@ %p\n' | sort -n -r | head -${numl} | cut -f2- -d" " | sed -e 's,^\./,,' | xargs ls -U -l
}
여전히 대부분의 작업은 plundra의 독창적 인 솔루션으로 수행되었습니다. 고마워요 plundra.
나는 같은 문제에 직면했다. 최신 파일을 재귀 적으로 찾아야합니다. 찾기까지 약 50 분이 걸렸습니다.
다음은 좀 더 빠른 스크립트입니다.
#!/bin/sh
CURRENT_DIR='.'
zob () {
FILE=$(ls -Art1 ${CURRENT_DIR} | tail -n 1)
if [ ! -f ${FILE} ]; then
CURRENT_DIR="${CURRENT_DIR}/${FILE}"
zob
fi
echo $FILE
exit
}
zob
디렉토리의 가장 최근에 수정 된 항목을 얻는 재귀 함수입니다. 이 항목이 디렉토리이면 함수를 재귀 적으로 호출하고이 디렉토리 등을 검색합니다.
현재 디렉토리의 모든 디렉토리의 수정 시간을 각 디렉토리의 최신 파일로 재귀 적으로 변경합니다.
for dir in */; do find $dir -type f -printf '%T@ "%p"\n' | sort -n | tail -1 | cut -f2- -d" " | xargs -I {} touch -r {} $dir; done
$ find . -type f -not -path '*/\.*' -printf '%TY.%Tm.%Td %THh%TM %Ta %p\n' |sort -nr |head -n 10
파일 이름의 공백을 잘 처리합니다. 공백을 사용해서는 안됩니다!
2017.01.25 18h23 Wed ./indenting/Shifting blocks visually.mht
2016.12.11 12h33 Sun ./tabs/Converting tabs to spaces.mht
2016.12.02 01h46 Fri ./advocacy/2016.Vim or Emacs - Which text editor do you prefer?.mht
2016.11.09 17h05 Wed ./Word count - Vim Tips Wiki.mht
find
링크를 따라 더 많은 맛이 있습니다.
솔루션도 필요했기 때문에이 질문에 대한 pypi / github 패키지를 작성했습니다.
https://github.com/bucknerns/logtail
설치:
pip install logtail
사용법 : 꼬리가 변경된 파일
logtail <log dir> [<glob match: default=*.log>]
Usage2 : 편집기에서 최근에 변경된 파일을 엽니 다
editlatest <log dir> [<glob match: default=*.log>]