날짜별로 정렬된 {size}보다 큰 파일 목록

날짜별로 정렬된 {size}보다 큰 파일 목록

"현재 디렉터리에서 20MB가 넘는 최신 파일 상위 10개 목록" 문제를 해결하고 싶습니다.

나는 ls이것을 할 수 있다:

ls -Shal |head

가장 큰 파일 상위 10개를 가져오고 다음을 수행합니다.

ls -halt |head

최신 상위 10개 파일 가져오기

find를 사용하면 다음과 같이 할 수 있습니다.

find . -size +20M

현재 디렉터리(및 원하지 않는 하위 디렉터리)에서 20MB가 넘는 모든 파일을 나열합니다.

가장 잘 사용될 수 있는 특정 크기 이상의 최신 파일 상위 10개를 나열하는 방법이 있습니까 ls?

답변1

"현재 디렉터리" 옵션 find은 다음과 같습니다 -maxdepth 1.

find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -Shal | head

또는

find . -maxdepth 1 -type f -size +20M -print0 | xargs -0 ls -halt | head

답변2

참고: 이는 GNU 조회에 적용되지만 다른 모든 검색에는 적용되지 않습니다.

find . -maxdepth 1 -size +20M -printf "%T@ %f\n" | 
    sort -nr | head -n 20 | sed 's/[^ ]\+ //'

@Rajish처럼 시작하되 printffrom 명령을 사용하여 find출력 형식을 지정하세요. 시간 관련 형식은 3가지가 있습니다.시간, c시간그리고시간- %Tmtime의 경우, 다른 형식 %A의 경우 %C.

@에포크 이후의 시간을 초 단위로 지정하는 형식입니다. %f파일 이름에 사용되며 \n두 파일 사이의 개행 문자로 사용됩니다.

그런 다음 숫자를 역순으로 정렬하여 가장 어린 파일을 먼저 제공하고 20행을 사용합니다 head.

마지막으로 sed시간 정보를 폐기하는 데 사용됩니다.

1) head한 줄씩 작업하므로 이름에 개행 문자가 20개가 넘는 단일 파일(약간 특이하지만 금지되지는 않음)이 처음 20개 일치 항목에 속하면 출력이 손상될 수 있습니다. 그러한 파일이 있으면 삭제해 보십시오. 이름을 변경하십시오. 간단한 스크립트의 경우 문제가 되는 경우가 많습니다.

답변3

지쉬의글로벌 예선이것을 쉽게 만드십시오. 한정자는 최소 20MB + 1바이트 길이의 파일을 선택하여 .일반 파일만 선택합니다. 정확히 20MB 길이 의 파일을 포함하려면 . 날짜별로 파일을 나열하려면 선택해야 합니다. 그렇지 않으면 파일을 다른 명령에 전달할 수 있습니다(가장 어린 것부터). 파일을 다른 명령에 먼저 전달하려면(가장 오래된 명령) 수정 시간을 늘려 정렬을 사용하고 마지막 일치 항목 10개를 추출합니다.Lm+20L+20971519om[1,10]-tlsOm[-10,-1]

ls -ltr -- *(.Lm+20om[1,10])
echo *(.Lm+20Om[-10,-1])

답변4

파일 이름에 줄 바꿈이 포함되어 있는지 여부에 관계없이 지정된 10개의 파일만 인쇄됩니다. 파일 시스템을 사용합니다inodes

cd "$1"
for i in $(find . -maxdepth 1 -type f -size +20M -printf "%T@\t%i\n" \ 
           | sort -nr | head | cut -f 2)
do
  ls -l "$(find . -inum $i)"
done

관련 정보