답변:
참고 : 이것은 GNU-find에서 작동하지만 다른 모든 것은 아닙니다.
find . -maxdepth 1 -size +20M -printf "%T@ %f\n" |
sort -nr | head -n 20 | sed 's/[^ ]\+ //'
@Rajish처럼 시작하지만 printf
from 명령 find
을 사용하여 출력 형식을 지정하십시오. 이 3 시간 관련 형식이다 에 atime, ctime이 과 에 mtime은 - %T
mtime에 대한되고, %A
그리고 %C
다른 포맷이다.
@
에포크 이후의 시간 형식을 초 단위로 지정하는 것입니다. %f
파일 이름, \n
두 파일 사이의 줄 바꿈입니다.
그런 다음 숫자를 역순으로 정렬하면 가장 어린 파일이 먼저 나오고을 사용하여 20 줄 ¹을 head
받습니다.
결국, sed
시간 정보를 버리는 데 사용됩니다.
¹) head
한 줄씩 작동하므로 이름에 20 개 이상의 줄 바꿈이있는 단일 파일은 조금 특이하지만 금지되지는 않지만 처음 20 개 일치에 속하는 경우 출력을 손상시킬 수 있습니다. 그러한 파일이 있으면 파일을 제거하십시오-이름을 바꾸십시오. 간단한 스크립트에서는 종종 문제가됩니다.
printf
특정 GNU 배포판에서만 작동합니다.
%T+
같은 인간이 읽을 수있는 타임 스탬프를 생성 2018-11-06+13:37:54.4606466460
하여도 정렬되는 sort
(이없이 -n
), 참조 : unix.stackexchange.com/questions/29899/...
Zsh의 glob 한정자 는 이것을 쉽게 만듭니다. .
예선만을 선택 일반 파일, Lm+20
20MB 이상의 플러스 긴 한 바이트에있는 선택 파일; 정확히 20MB 길이의 파일을 포함 시키려면을 사용하십시오 L+20971519
. 그런 다음 om
수정 시간을 줄임으로써 정렬 [1,10]
하고 확장을 처음 10 개 일치로 제한합니다. 날짜별로 파일을 나열하려면 여전히 -t
옵션이 필요합니다 ls
. 또는 파일을 다른 명령 (가장 먼저)에 전달할 수 있습니다. 가장 오래된 파일이있는 다른 명령으로 파일을 전달하려면 Om
수정 시간을 늘려 정렬 [-10,-1]
하고 마지막 10 개의 일치 항목을 추출하는 데 사용하십시오.
ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])
모든 답변에 감사드립니다. 내가 간 것은 다음과 같습니다.
ls -halt | grep "M " |head
메가 바이트 (및 기가 바이트 미만)보다 20 메가 바이트를 선호하더라도 파일 크기의 사람이 읽을 수있는 요소를 쉽게 기억하고 보존합니다.
ls
그것은 아무것도 더, 당신이 파일의 표현을 보여줍니다. 간단한 파일 이름의 경우 출력은 대부분 파일 이름과 동일하지만 그 결과에 의존해서는 안됩니다.
file
의-ls
명령 을 사용 하면 특수 문자가 백 슬래시 이스케이프 문자로 인쇄됩니다find . -maxdepth 1 -size +20M -printf "%T@ " -ls | sort -nr | head -n 20 | sed 's/[^ ]\+ //'
. 또한 형식은ls -l
, EoghanM도 지정-l
했습니다.