이 파일은 다음에 의해 생성되었습니다.
ls -Raltr -block-size=M /* > /home/root/all_files.txt
grep을 사용하여 여러 명령을 시도했지만 성공하지 못했습니다.
답변1
가장 간단한 방법은 -S
with를 사용하여 ls
디렉토리 내용을 크기별로 정렬하는 것입니다. 파일은 여전히 디렉토리별로 그룹화되어 있는데 이는 아마도 원하는 것이 아닐 수도 있습니다.
ls -RaltrS --block-size=M /*
이 방법은 여기서는 옵션이 아닐 수 있습니다. all_files.txt
파일이 오래되었거나 다른 컴퓨터에서 생성되었을 수 있습니다. 파일 크기별로 파일 이름을 정렬하는 것은 여전히 가능합니다. 일반적인 파일의 경우 ls -Raltr --block-size=M
(1개가 아닌 2개의 하이픈으로 시작하는 참고)에 의해 생성된 출력 줄은 --block-size
다음과 같습니다.
-rw-rw-r-- 1 owner group 1M Apr 16 05:37 file.txt
sort
with -h
(사람이 읽을 수 있는 숫자(예: 1M)) 및 -k 5
텍스트의 다섯 번째 열(공백으로 구분) 을 사용하여 파일 크기를 지정합니다.
sort -k 5 -h /home/root/all_files.txt
ls -Raltr --block-size=M /*
/home/root/all_files.txt
파일 크기가 나열되지 않은 추가 행이 있기 때문에 저장된 출력을 정렬하는 것은 혼란스러울 수 있으므로 grep
먼저 원하는 행만 가져오려면 다음을 사용하십시오.
grep '^-' /home/root/all_files.txt | sort -k 5 -h
여기서 grep '^-'
하이픈으로 시작하지 않는 줄(예: d
for 디렉터리 또는 링크로 l
시작하는 줄 )은 삭제됩니다.
이 답변은 Xubuntu 16.04의 GNU 도구에 대한 것입니다. MacOS 또는 BSD 시스템에서는 테스트되지 않았습니다.
답변2
현재 디렉토리 안이나 아래의 모든 일반 파일을 크기별로 정렬하기 위해 쉘은 경로 이름 내에서 일치하는 zsh
편리한 와일드카드 패턴을 제공합니다 (예: "하위 디렉토리로 재귀적으로 이동"). 그것은 또한 허용합니다**
/
적격일반 파일에 대한 일치 항목만 가져오고 결과는 해당 파일의 크기에 따라 정렬되는 모드입니다.
zsh
쉘 에서 이 패턴은 다음과 같습니다.
**/*(.OL)
그러면 모든 일반 파일( )이 .
역순( ) 크기 순서( )로 정렬되어 반환됩니다 .O
L
파일 목록만 얻으려면 다음을 사용하세요.
printf '%s\n' **/*(.OL)
ls
"긴 목록" 출력을 얻으려면 다음을 사용하십시오.
ls -fl **/*(.OL)
(이 -f
옵션은 ls
파일 정렬을 방지합니다.)
zsh
일반 쉘이 아니더라도 다음과 같은 명령을 사용할 수 있습니다 zsh
.
zsh -c 'ls -fl **/*(.OL)'
--block-size=M
GNU를 사용한다면 당연히 이것을 추가할 수도 있습니다 ls
.
가장 큰 상위 10개 파일에만 관심이 있는 경우 다음 패턴을 사용하십시오.
**/*(.OL[1,10])
대신에.