파일을 재귀 적으로 나열하고 수정 시간별로 정렬하는 방법은 무엇입니까?


13

디렉토리 아래의 모든 파일을 재귀 적으로 나열하고 수정 시간별로 출력을 정렬하려면 어떻게합니까?

나는 일반적으로 사용 ls -lhtc하지만 모든 파일을 재귀 적으로 찾지는 않습니다. Linux와 Mac을 사용하고 있습니다.

ls -l Mac OS X에서는

-rw-r--r--    1 fsr  user      1928 Mar  1  2011 foo.c
-rwx------    1 fsr  user      3509 Feb 25 14:34 bar.c

날짜 부분이 일치하지 않거나 정렬되지 않은 경우 솔루션에서이를 고려해야합니다.

부분 솔루션

stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-

작동하지만 재귀 적으로는 아닙니다.


나는 당신이 리눅스에 있다고 가정 할 것이지만, 당신은 OS를 질문에 명시 적으로 또는 바람직하게 태그로 지정해야합니다.
— EBGreen

답변:


2

stat@ johnshen64가 제안한대로 사용하는 방법은 다음과 같습니다.

find . -type f -exec stat -f "%m%t%Sm %N" '{}' \; | sort -rn | head -20 | cut -f2-

find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-OS X에서 파일의 절대 경로 만 인쇄합니다.
— Lri

어떤 버전 stat을 사용하고 있습니까? 위의 형식이 작동하지 않았습니다. 나는 다음을 사용해야했다 find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-. 이것은 함께stat (GNU coreutils) 8.23
— user84207

12

사용 find의 -printf와 종류의 합리적인 날짜 형식에 :

find -type f -printf '%T+\t%p\n' | sort -n

이는 프로세스 포크를 최소화하여 가장 빠릅니다.

소수 부분이 마음에 들지 않는 경우의 예 (파일 시스템에서 종종 구현되지 않는 경우) :

find -type f -printf '%T+\t%p\n' | sed 's/\.[[:digit:]]\{10\}//' | sort -n
find -type f -printf '%T+\t%p\n' | cut --complement -c 20-30 | sort -n

편집 :find Mac의 표준 에는 없습니다 -printf. 그러나 Mac에서 GNU find 를 설치하는 것은 어렵지 않습니다 (Mac / Linux 호환성 및에 관한 추가 경고는 해당 링크 참조 xargs).


0

find .모든 파일을 얻을 수 있어야합니다. 이 같은:

find . -exec ls -dl '{}' \; | sort -k 6,7

필요에 따라 조정해야합니다.


나는 또한 그것이 EBGreen과 같이 리눅스라고 가정한다. ls는 Windows PS의 별칭이므로 정렬 객체를 사용하고 그럴 경우 자식 항목을 재귀 적으로 가져와야하지만 아이디어는 동일합니다.
— johnshen64

Mac에서 날짜가 때때로 연도를 놓칠 때 제대로 작동합니까?
— qazwsx

당신은 옳습니다, 최근 파일의 날짜 표시는 일을 망칠 것입니다. 이 경우 정확한 형식의 날짜를 얻으려면 대신 stat를 사용해야합니다. 내 파일이 매우 오래되어 명령이
— 제대로 작동했기

@ johnshen64 : lsLinux에는 --time-format최근 및 이전 파일 날짜가 모두 같은 형식으로 표시되도록하는 데 사용할 수 있는 옵션이 있습니다.
— RedGrittyBrick

아 감사합니다, 당신은 맞아, 그냥 사용하지 않았습니다. stat를 사용하는 것보다 훨씬 간단합니다. 제 생각에-시간 스타일이라고합니다.
— johnshen64

0

zsh를 사용하고 있었기 때문에 Unix Stack Exchange 사이트에서 비슷한 질문에 대한이 답변이 도움이되었습니다.

수정 날짜순으로 정렬 된 파일을 재귀 적으로 나열하는 방법 (stat 명령을 사용할 수 없음)


이것은 실제로 주석이며 원래 질문에 대한 답변이 아닙니다 . 언제든지 자신의 게시물 에 댓글 을 달 수 있으며 평판 이 충분 하면 게시물 에 댓글 을 달 수 있습니다 . 댓글을 작성하려면 50 개의 평판이 필요한 이유를
— DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.