편집 : 나는이 게시물이 생각했던 것처럼 '특히 유용하지는 않다'고 생각합니다. 이것은 전체 파일 목록을 정렬하는 대신 가장 최근에 수정 된 파일을 추적하는 정말 빠른 솔루션입니다.
find . -type f -printf '%T@ %p\n' | awk 'BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; } { if ($1 > mostrecenttime) { mostrecenttime = $1; mostrecentline = $0; } } END { print mostrecentline; }' | cut -f2- -d ' '
명확성을 위해 여러 줄에 걸쳐서 다음과 같이 보입니다.
find . -type f -printf '%T@ %p\n' | awk '
BEGIN { mostrecenttime = 0; mostrecentline = "nothing"; }
{
if ($1 > mostrecenttime)
{ mostrecenttime = $1; mostrecentline = $0; }
}
END { print mostrecentline; }' | cut -f2- -d ' '
편집 종료
특히 유용한 게시물은 아니지만 '배열'이 속도를 논의하고 있었기 때문에 이것을 공유한다고 생각했습니다.
정렬 및 enzotib의 솔루션은 디렉토리 내의 모든 파일을 mtimes로 나열한 다음 정렬하는 것입니다. 아시다시피 최대 값을 찾기 위해 정렬이 필요하지 않습니다. 최대를 찾는 것은 선형 시간으로 수행 할 수 있지만 정렬에는 n log (n) 시간이 걸립니다 [차이가 크지는 않지만 여전히;)]. 나는 이것을 구현하는 깔끔한 방법을 생각할 수 없다. [편집 : 깔끔하고 (더러워 보이지만) 빠른 구현이 위에 제공되었습니다.]
다음으로 가장 좋은 방법-디렉토리에서 가장 최근에 편집 한 파일을 찾으려면 각 레벨 1 서브 디렉토리에서 가장 최근에 편집 한 파일을 재귀 적으로 찾으십시오. 이 파일이 서브 디렉토리를 나타내도록하십시오. 이제 레벨 1 파일을 레벨 1 서브 디렉토리의 대표와 함께 정렬하십시오. 각 디렉토리의 레벨 1 파일 수와 하위 디렉토리 수가 거의 일정한 경우이 프로세스는 총 파일 수에 비례하여 확장됩니다.
이것이 이것을 구현하기 위해 생각해 낸 것입니다.
findrecent() { { find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1; }
findrecent .
나는 이것을 실행했고 많은 find: findrecent: No such file or directory
오류가 발생했다. 이유 : find의 -exec는 다른 쉘에서 실행됩니다. .bashrc, .xsessionrc에서 findrecent를 정의하려고 시도했지만 도움이되지 않았습니다. 결국 나는 퍼팅에 의지했다
#!/bin/bash
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
findrecent
내 PATH에서 호출 한 다음 실행하십시오.
나는 이것을 출력하고 기다리지 않고 출력없이 기다렸다. 무한 루프를 처리하지 않았는지 확인하기 위해 파일을 다음과 같이 수정했습니다.
#!/bin/bash
echo "$1" >&2
{ find "$1" -maxdepth 1 -type f -exec stat -c "%y %n" {} + | sort -r | head -1 && find "$1" -mindepth 1 -maxdepth 1 -type d -exec findrecent {} \;; } | sort -r | head -1;
다시 시도하십시오. 그것은 작동했지만 홈 폴더에서 1 분 35 초가 걸렸습니다. 정렬 및 enzotib의 솔루션은 각각 1.69, 1.95 초가 걸렸습니다!
O (n)의 O (n log (n))보다 우월합니다! 당신은 함수 호출 오버 헤드를 젠장! [또는 오히려 스크립트 호출 오버 헤드]
그러나이 스크립트는 이전 솔루션보다 확장 성이 뛰어나고 Google의 메모리 뱅크에서보다 더 빠르게 실행됩니다.