"현재 디렉터리에서 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처럼 시작하되 printf
from 명령을 사용하여 find
출력 형식을 지정하세요. 시간 관련 형식은 3가지가 있습니다.시간, c시간그리고시간- %T
mtime의 경우, 다른 형식 %A
의 경우 %C
.
@
에포크 이후의 시간을 초 단위로 지정하는 형식입니다. %f
파일 이름에 사용되며 \n
두 파일 사이의 개행 문자로 사용됩니다.
그런 다음 숫자를 역순으로 정렬하여 가장 어린 파일을 먼저 제공하고 20행을 사용합니다 head
.
마지막으로 sed
시간 정보를 폐기하는 데 사용됩니다.
1) head
한 줄씩 작업하므로 이름에 개행 문자가 20개가 넘는 단일 파일(약간 특이하지만 금지되지는 않음)이 처음 20개 일치 항목에 속하면 출력이 손상될 수 있습니다. 그러한 파일이 있으면 삭제해 보십시오. 이름을 변경하십시오. 간단한 스크립트의 경우 문제가 되는 경우가 많습니다.
답변3
지쉬의글로벌 예선이것을 쉽게 만드십시오. 한정자는 최소 20MB + 1바이트 길이의 파일을 선택하여 .
일반 파일만 선택합니다. 정확히 20MB 길이 의 파일을 포함하려면 . 날짜별로 파일을 나열하려면 선택해야 합니다. 그렇지 않으면 파일을 다른 명령에 전달할 수 있습니다(가장 어린 것부터). 파일을 다른 명령에 먼저 전달하려면(가장 오래된 명령) 수정 시간을 늘려 정렬을 사용하고 마지막 일치 항목 10개를 추출합니다.Lm+20
L+20971519
om
[1,10]
-t
ls
Om
[-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