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


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.