폴더에서 가장 큰 파일을 찾아야합니다.
폴더를 재귀 적으로 스캔하고 내용을 크기별로 정렬하려면 어떻게합니까?
을 사용해 보았지만 ls -R -S
디렉토리도 나열됩니다.
나는 또한 사용하려고했다 find
.
폴더에서 가장 큰 파일을 찾아야합니다.
폴더를 재귀 적으로 스캔하고 내용을 크기별로 정렬하려면 어떻게합니까?
을 사용해 보았지만 ls -R -S
디렉토리도 나열됩니다.
나는 또한 사용하려고했다 find
.
답변:
당신은 또한 이것을 그냥 할 수 있습니다 du
. 안전한면에 있기 위해이 버전을 사용하고 있습니다 du
.
$ du --version
du (GNU coreutils) 8.5
접근:
$ du -ah ..DIR.. | grep -v "/$" | sort -rh
명령 du -ah DIR
은 주어진 디렉토리에있는 모든 파일과 디렉토리 목록을 생성합니다 DIR
. 은 -h
내가 선호하는 사람이 읽을 수있는 크기를 생성합니다. 원하지 않으면 해당 스위치를 삭제하십시오. head -6
출력량을 제한하기 위해 그냥 사용하고 있습니다!
$ du -ah ~/Downloads/ | head -6
4.4M /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020_WirelessFrames_exUG_GLB_en.pdf
624K /home/saml/Downloads/kodak_W820_wireless_frame/easyshare_w820.pdf
4.9M /home/saml/Downloads/kodak_W820_wireless_frame/W820_W1020WirelessFrameExUG_GLB_en.pdf
9.8M /home/saml/Downloads/kodak_W820_wireless_frame
8.0K /home/saml/Downloads/bugs.xls
604K /home/saml/Downloads/netgear_gs724t/GS7xxT_HIG_5Jan10.pdf
가장 작은 것부터 가장 큰 것까지 쉽게 정렬 할 수 있습니다.
$ du -ah ~/Downloads/ | sort -h | head -6
0 /home/saml/Downloads/apps_archive/monitoring/nagios/nagios-check_sip-1.3/usr/lib64/nagios/plugins/check_ldaps
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/index/write.lock
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/0/translog/translog-1365292480753
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/index/write.lock
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/1/translog/translog-1365292480946
0 /home/saml/Downloads/data/elasticsearch/nodes/0/indices/logstash-2013.04.06/2/index/write.lock
가장 큰 것부터 가장 작은 것으로 바꾸십시오.
$ du -ah ~/Downloads/ | sort -rh | head -6
10G /home/saml/Downloads/
3.8G /home/saml/Downloads/audible/audio_books
3.8G /home/saml/Downloads/audible
2.3G /home/saml/Downloads/apps_archive
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G /home/saml/Downloads/digital_blasphemy
나에게 디렉토리를 보여주지 말고 파일 만 :
$ du -ah ~/Downloads/ | grep -v "/$" | sort -rh | head -6
3.8G /home/saml/Downloads/audible/audio_books
3.8G /home/saml/Downloads/audible
2.3G /home/saml/Downloads/apps_archive
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
1.5G /home/saml/Downloads/digital_blasphemy
835M /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
가장 작은 파일부터 가장 큰 파일의 목록을 원하지만 상위 6 개의 문제가있는 파일을 원하면 정렬 스위치를 반대로 바꾸고 ( -r
) tail -6
대신을 사용할 수 있습니다 head -6
.
$ du -ah ~/Downloads/ | grep -v "/$" | sort -h | tail -6
835M /home/saml/Downloads/apps_archive/cad_cam_cae/salome/Salome-V6_5_0-LGPL-x86_64.run
1.5G /home/saml/Downloads/digital_blasphemy
1.5G /home/saml/Downloads/digital_blasphemy/db1440ppng.zip
2.3G /home/saml/Downloads/apps_archive
3.8G /home/saml/Downloads/audible
3.8G /home/saml/Downloads/audible/audio_books
grep -v "/$"
부분은 디렉토리가 슬래시가 추가하지 않는 한, 당신이 기대하는 일을하지 않는 것. 누구나 결과에서 디렉토리를 제외하는 방법을 알고 있습니까?
/
예를 들어 /home/saml/Downloads/audible
디렉토리 인 것처럼 보이지만 슬래시가 없습니다. /home/saml/Downloads/
슬래시 만 있지만, 아마도 initial 인수를 지정할 때 슬래시로 작성했기 때문일 수 있습니다 du
.
현재 디렉토리와 하위 디렉토리에서 모든 파일을 찾고 경로를 고려하지 않고 크기에 따라 나열하고 GNU와 함께 파일 이름에 줄 바꿈 문자가 포함되어 있지 않다고 가정하면 다음과 같이 find
할 수 있습니다.
find . -type f -printf "%s\t%p\n" | sort -n
에서 man find
는 GNU 시스템 :
-printf format
True; print format on the standard output,
interpreting `\' escapes and `%' directives.
Field widths and precisions can be specified
as with the `printf' C function. Please note
that many of the fields are printed as %s
rather than %d, and this may mean that flags
don't work as you might expect. This also
means that the `-' flag does work (it forces
fields to be left-aligned). Unlike -print,
-printf does not add a newline at the end of
the string. The escapes and directives are:
%p File's name.
%s File's size in bytes.
보낸 사람 man sort
:
-n, --numeric-sort
compare according to string numerical value
다음 명령을 시도하십시오 :
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
현재 디렉토리에서 가장 큰 20 개의 파일을 재귀 적으로 나열합니다.
참고 :이 옵션 -h
에 대한이 sort
설치할했습니다, 그래서 OSX / BSD에서 사용할 수 없습니다 sort
에서 coreutils
(예를 통해 brew
) 및 로컬 빈 경로를 적용 PATH
, 예를 들어,
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.
또는 다음을 사용하십시오.
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
가장 큰 디렉토리의 경우 다음을 사용하십시오 du
.
du -ah . | sort -rh | head -20
또는:
du -a . | sort -rn | head -20
그러면 모든 파일이 재귀 적으로 검색되고 크기별로 정렬됩니다. 모든 파일 크기를 kb로 인쇄하고 반올림하여 0KB 파일을 볼 수는 있지만 사용하기에 충분히 가까웠으며 OSX에서 작동합니다.
find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1
find . -type f
파일을 찾습니다 ... 재귀 적으로 작동합니다. 그렇습니다. 그러나 디렉토리 자체가 아니라 찾은 모든 파일을 나열합니다.
이것은 여러 가지 이유로 엄청나게 일반적인 요구 사항이며 (디렉토리에서 가장 최근 백업을 찾는 것을 좋아합니다) 놀랍게도 간단한 작업입니다.
find, xargs, stat, tail, awk 및 sort 유틸리티를 사용하는 Linux 솔루션을 제공하려고합니다.
대부분의 사람들은 고유 한 답변을 제공했지만 파일 이름을 올바르게 처리하기 때문에 내 것을 선호하며 유스 케이스를 쉽게 변경할 수 있습니다 (통계 수정 및 인수 정렬)
또한 Windows에서도이 기능을 사용할 수있게 해주는 Python 솔루션을 제공합니다.
find . -type f -print0 | xargs -0 -I{} stat -c '%s %n' {} | sort -n
# Each utility is split on a new line to help
# visualize the concept of transforming our data in a stream
find . -type f -print0 |
xargs -0 -I{} stat -c '%s %n' {} |
sort -n |
tail -n 1 |
awk '{print $2}'
# (Notice only the first argument of stat changed for new functionality!)
find . -type f -print0 | xargs -0 -I{} stat -c '%Y %n' {} |
sort -n | tail -n 1 | awk '{print $2}'
설명:
#!/usr/bin/env python
import os, sys
files = list()
for dirpath, dirname, filenames in os.walk(sys.argv[1]):
for filename in filenames:
realpath = os.path.join(dirpath, filename)
files.append(realpath)
files_sorted_by_size = sorted(files, key = lambda x: os.stat(x).st_size)
largest_file = files_sorted_by_size[-1]
print(largest_file)
이 스크립트는 설명하는 데 시간이 조금 더 걸리지 만 기본적으로 스크립트로 저장하면 명령 줄에 제공된 첫 번째 인수를 검색하여 해당 디렉토리에서 가장 큰 파일을 반환합니다. 스크립트는 오류 검사를하지 않지만 파이썬에서이 문제에 접근하는 방법에 대한 아이디어를 제공해야합니다.이 문제를 해결하는 데 플랫폼 독립적 인 방법이 있습니다.