답변:
당신은 찾기를 사용할 수 있습니다 :
find . -type f -printf "%s %P\n" | sort -n
선택 사항 : 바이트 값을 사람이 읽을 수있는 형식으로 변환하려면 다음을 추가하십시오.
| numfmt --to=iec-i --field=1
설명:
find in current directory (.) all files (-type f)
-printf: suppress normal output and print the following:
%s - size in bytes
%P - path to file
\n - new line
| sort -n: sort the result (-n = numeric)
특정 쉘을 지정하지 않았으므로 zsh의 glob 한정자를 사용하는 대안이 있습니다.
setopt extendedglob
재귀를 위해. 그런 다음 예를 들면 다음과 같습니다.
일반 파일을 재귀 적으로 나열하십시오.
printf '%s\n' **/*(.)
재귀, 일반 파일 목록을 O를 하여 rdered 에 구김 L의 ength (즉, 크기) :
printf '%s\n' **/*(.oL)
재귀 목록 일반 파일, O는 에 의해 rdered 드 주름 잡기의 크기 :
printf '%s\n' **/*(.OL)
크기를 줄이면서 순서대로 일반 파일을 나열하고 상위 3 개의 결과를 선택하십시오.
printf '%s\n' **/*(.OL[1,3])
파일 크기도 원하는 경우 사용할 수 있습니다.
du -hb **/*(.OL[1,3])
으로 globstar
쉘 옵션을 설정하면 글 로빙 쉘을 사용할 수 있습니다 :
shopt -s globstar # don’t match hidden files
shopt -s globstar dotglob # match hidden files
stat -c"%s %n" **/* | sort -n
너무 많은 파일로 시도하면 "인수 목록이 너무 깁니다"오류가 발생합니다. 그 해결하려면 사용할 수 있습니다 printf
및 xargs
:
printf "%s\0" **/* | xargs -0 stat -c"%s %n" | sort -n
방금 이것이 (4096 바이트 크기의) 디렉토리를 인쇄한다는 것을 깨달았습니다. 원치 않으면 이것을 대신 사용하십시오.
stat -c"%A %s %n" **/* | sed '/^d/d;s/\S* //' | sort -n
printf "%s\0" **/* | xargs -0 stat -c"%A %s %n" | sed '/^d/d;s/\S* //' | sort -n
$ tree
.
├── edits.png
├── makescript
├── new
│ └── edits.png
└── test
└── 1.png
2 directories, 4 files
$ stat -c"%s %n" **/* | sort -n
0 test/1.png
43 makescript
2160 edits.png
2160 new/edits.png
4096 new
4096 test
$ stat -c"%A %s %n" **/* | sed '/^d/d;s/\S* //' | sort -n
0 test/1.png
43 makescript
2160 edits.png
2160 new/edits.png
dotglob
쉘 옵션 을 설정하기 만하면된다 .
printf "%s\0" **/* | xargs -0 sh -c 'for f; do [ -d "$f" ] || stat -c "%s %n" "$f"; done' sh | sort -n
ls -lhSd **/*
디렉토리를 목록의 일부로 사용 하는 것이 마음에 들지 않으면 사용할 수 있습니다 . 디렉토리 이름의 아무도가없는 경우 또는 .
그 (것)들에서, 당신이 원하는 모든 파일은 어떻게 당신이 할 수있는, ll -hS **/*.*
또는 유사한.
zsh가없는 경우에도 du
+를 사용할 수 있습니다 sort
.
디렉토리의 누적 크기를 포함하여 사람이 읽을 수있는 크기 :
du --apparent-size -ah0 . | sort -zh | xargs -0L1
파일 만 (을 사용하여 find
) :
find . -type f -print0 |
du --files0-from=- --apparent-size -ah0 |
sort -zh |
xargs -0L1
두 경우 모두, 내가 사용하는 null로 끝나는 라인 (로 선택했다 -0
, -z
, -print0
모든 유효한 파일 이름에 대한 안전을 위해, 옵션).
너무 크지 않은 디렉토리 트리에서 빠른 대화식 사용 을 위해서는shopt -s globstar
정말 좋습니다. 글로브는 유형에 따라 디렉토리를 필터링 할 수 없습니다,하지만 당신은 그것을 사용하는 경우 ls -d
다음 ls
단지 대신 내용의 디렉토리 이름을 인쇄합니다.
ll
별명에 다음이 포함되어 있다고 가정하십시오 -lh
.
# with shopt -s globstar in your .bashrc
ll -rSd **/*
내 코드 골프 디렉토리에서 이와 같은 출력을 제공하지만 색상 강조 표시를 사용하면 디렉토리를 쉽게 볼 수 있습니다. 파일 크기별 정렬은 하위 디렉토리에서 발생했습니다.
drwxr-xr-x 1 peter peter 70 Jun 8 07:56 casexchg
...
drwxr-xr-x 1 peter peter 342 Mar 13 18:47 parity-party
-rw-r--r-- 1 peter peter 387 Jul 29 2017 likely.cpp
-rw-r--r-- 1 peter peter 416 Aug 31 2017 true-binary.asm~
-rw-r--r-- 1 peter peter 447 Feb 23 20:14 weight-of-zero.asm
...
-rw-r--r-- 1 peter peter 6.4K Jun 1 2017 string-exponential.asm
-rwxr-xr-x 1 peter peter 6.7K Aug 31 2017 true-binary
-rwxr-xr-x 1 peter peter 6.8K Sep 17 2017 dizzy-integer
-rw-r--r-- 1 peter peter 7.5K Jul 24 2017 fibonacci/fibonacci-1G.v3-working-32b-stack-except-output.asm
-rw-r--r-- 1 peter peter 8.4K Jul 25 2017 fibonacci/perf.32bit-pop-114limb.sub-cmc.1G~
-rw-r--r-- 1 peter peter 8.4K Jul 25 2017 fibonacci/perf.32bit-pop-114limb.sub-cmc.1G
-rwxr-xr-x 1 peter peter 8.4K May 19 04:29 a.out
-rw-r--r-- 1 peter peter 8.9K Jul 25 2017 fibonacci/perf.python-xnor-2n
-rw-r--r-- 1 peter peter 9.5K Jul 26 2017 fibonacci/fibonacci-1G-performance.asm
-rwxr-xr-x 1 peter peter 9.6K Apr 12 23:25 empty-args
-rw-r--r-- 1 peter peter 9.7K Dec 18 17:00 bubblesort.asm
-rwxr-xr-x 1 peter peter 9.9K Feb 6 23:34 parity-party/a.out
-rw-r--r-- 1 peter peter 9.9K Jul 25 2017 fibonacci/fibonacci-1G-performance.asm~
...
파이프를 통해 디렉토리를 필터링 할 수 있습니다. grep -v '^d'
파일 이름에 패턴이있는 경우 파일이 아닌 디렉토리 만 일치하는 글로브를 사용할 수 있습니다. 예를 들면 ll -rSd **/*.jpg
, 또는 **/*.*
디렉토리 이름의 아무도가없는 경우 작동 .
그들, 모든 파일이 당신이 원하는 할 .
(DOS 배경 지식을 가진 사람들의 경우 : *.*
유닉스 에는 마법이 없습니다 . 문자 그대로의 점이 포함 된 디렉토리 항목과 일치하지만 실행 파일 및 텍스트 파일 이외의 파일 이름을 사용하는 것이 일반적입니다.)
@dessert는 모든 파일 shopt -s dotglob
과 일치 해야한다고 지적 합니다.
find
하나의 ls
명령 줄 에 맞지 않는 파일이 너무 많지 않으면 파일을 정렬 할 수 find -exec ls {} +
있는 명령 줄에 모두 넣 ls
습니다.
find -not -type d -exec ls --color -lrSh {} +
-not -type d
대신에 사용 -type f
하면 심볼릭 링크, 명명 된 파이프, 소켓, 장치 파일 및 디렉토리에서 발동되는 모든 것을 무시하지 않아도됩니다.
du
:du -ach | sort -h
....
4.0K x86-modedetect-polyglot.o
8.0K ascii-compress-base.asm
8.0K dizzy-integer
8.0K stopwatch-rdtsc.asm
8.0K string-exponential.asm
8.0K true-binary
12K a.out
12K bubblesort.asm
12K casexchg
12K empty-args
100K parity-party
220K fibonacci
628K total
이제 디렉토리 이름이 목록에 정렬되어 모든 내용의 합계를 합하지만 개별 파일은 여전히 포함됩니다.
sort -h
, aka --human-numeric-sort
는 du -h
인쇄물 과 같이 크기 접미사로 숫자를 정렬 합니다. 와 함께 사용하기에 완벽합니다 du
.
나는 종종을 사용 du -sch * | sort -h
하거나 */
디렉토리 만 가져옵니다.
du -sch **/* | sort -h
옵션 du
이있는 것을 잊어 버린 경우 위의 출력을 제공합니다 -a
.
(나는 답변을 게시하기 때문에 시간을 들여서 보았습니다. 대화 형 사용의 경우 아마 방금 사용했을 것 du -sch **/*
입니다.