찾기 결과에 "사람이 읽을 수있는"파일 크기를 표시하는 방법은 무엇입니까?


11

Centos 서버에서 큰 파일을 모두 찾으려고합니다. 그렇게하려면 내가 사용하고 있습니다 :

find / -maxdepth 10 -size +100000 -ls

로 변경 -ls을 시도했지만 -lsh허용되지 않습니다.

사람이 읽을 수있는 크기 (접미사 k, M,…)로 이러한 결과를 표시하려면 어떻게해야합니까?


인간이 읽을 수있는 정의는 무엇입니까? 나를 위해 그것은 충분히 사람이 읽을 수 있습니다.
manatwork

file유틸리티를 사용해보십시오 find.
Ramesh

@manatwork kb, mb, gb
blarg

답변:


10

find와 같은 정교한 옵션이 없습니다 ls. 원하는 경우 ls -h전화를해야합니다 ls.

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

-xdev다른 파일 시스템으로의 재귀를 피하는 옵션을 권장합니다 . 디스크 공간이 걱정된다면 쓸모가 없습니다.

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

쉘로 zsh를 사용하는 경우을 사용하는 대신 findglob 한정자를 사용할 수 있습니다. 파일 크기를 제한하는 것은 간단합니다 : L그 다음에 크기; 크기는 숫자 앞에 선택적인 단위를 가질 수 있습니다. 최대 깊이에 신경 쓰지 않으면 **/하위 디렉토리로 재귀 하는 데 사용할 수 있습니다 . 최대 깊이에 관심이있는 경우 zsh glob 패턴에 "최대 n 번 발생" 을 표현할 수있는 방법이 없기 때문에 더 번거 롭습니다 . 교차 장치 재귀를 피하려면 dglob 한정자를 사용하십시오 . statLinux 에서 명령 stat -c %d /으로 표시하거나 (숫자 만 표시) zsh 자체 stat내장 ( zmodload zsh/stat로드하여 실행 )으로 표시 할 수있는 장치 번호를 찾아야합니다 .

ls -lh /**/*(L+M99d$(stat -c %d /))

4

당신이 시도하는 명령을 읽을 수 있습니다. 그러나 아래와 같이 찾기 기능으로 파일 유틸리티를 사용할 수 있습니다.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

이를 수행하는 다른 방법은 아래 명령을 사용하는 것입니다.

du -BM / | sort -nr

위의 명령은 정렬 된 파일 크기의 파일을 제공합니다.

coreutils> 7.5를 사용하는 경우 아래 명령을 실행하여 파일을 크기별로 나열 할 수 있습니다.

du -ah / | grep -v "/$" | sort -h

내 컴퓨터에서 sort -h옵션을 사용할 수 없었습니다 .

주석에서 언급했듯이 사람이 읽을 수있는 형식은 파일 크기가 kb , mb 또는 gb 이어야한다는 것 입니다. 나는 대답으로 게시 한 두 번째 명령을 사용합니다. 시스템에서 사용할 때 얻은 결과는

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

두 번째 명령에 하한을 설정하는 방법이 있습니까? 난 당신이 바로 R 제거해야 참조 - 가장 큰 파일은 쉘 편집의 상단을 사라 빠르게 상단에 표시하고
blarg

> output명령 에 추가하여 출력을 파일로 경로 재 지정할 수 있습니다 . 그런 다음 파일을 열고 원하는대로 출력을 볼 수 있습니다.)
Ramesh

나는 이것이 폴더를 표시하는 것을 보았습니다. 반면에 나는 파일 뒤에 있습니다
blarg

du -a --max-depth=10 / | sort -rn내가 올 수있는 가까운 곳입니다. 그러나이 경우 크기가 KB, MB 또는 GB로 표시되지 않습니다.
Ramesh

1

나는 당신이 겪고있는 것이 다음과 같다고 생각합니다.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-exec당신이 명령을 실행 할 수 있습니다와는 {}찾기 '의 결과로 대체됩니다. 마지막으로 명령의 끝임 +을 알리고 명령이 필요합니다.


2
실제로 {}여기 를 인용하는 것은 완전히 불필요합니다 . 명령의 작은 따옴표는 셸에 대한 것이지만 셸은 ls -lah <args...>명령을 전혀 보지 {}못합니다. 따옴표로 표시 할 필요는 없습니다. 그것은입니다 find그것은을보고 ls -lah {}하고있다 find즉 확장 {}하고의 이름으로 묵시적으로 -exec옵션 find사용 exec*하기 때문에 공백 문제를 직접 인수에 시스템 호출을, 그래서이되지 않습니다 find하지 않을 것입니다 단어를-분할 파일 이름에.
jw013

1
-a에 대한 옵션은 ls인수가 파일이 아닌 디렉토리 될 것으로 예상되기 때문에 불필요하다. GNU find는 ls -dils-ls옵션을 사용 하므로 가장 가깝게 복제 할 수 있습니다 ls -dilsh.
jw013

사람의 발견은 사용의 첫 번째 예를 들어, 다음주는 간부를 : find . -type f -exec file '{}' \; 실행 파일 또는 현재 디렉토리 아래의 모든 파일에. 중괄호는 작은 따옴표로 묶어 쉘 스크립트 문장 부호로 해석되지 않도록합니다. 세미콜론은 백 슬래시를 사용하여 비슷하게 보호되지만 작은 따옴표도이 경우에 사용될 수 있습니다.
Tim Hughes

1
매뉴얼 페이지는 단순히 불필요한주의를 옹호합니다. 상처를 입지는 않지만 {}인용 해야 할 껍질은 없습니다 .
jw013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.