하위 폴더의 내용을 포함하여 파일 크기별로 정렬하여 디렉터리의 전체 내용을 나열하려고 합니다. 지금까지 나는 여전히 재귀적인 방식을 사용하면서 나열하고 정렬하는 데 성공했습니다 ls -lhSR
(이것은 h
있으면 좋지만 파일 크기를 얻을 수 있는 한 나에게 꼭 필요한 것은 아닙니다). 나는 명백한 것을 간과하거나 불가능한 것을 요구할 가능성이 높지만 여기에 조언을 주시면 대단히 감사하겠습니다.
답변1
다음을 사용하여 찾을 수 있습니다.
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)
답변2
특정 쉘을 지정하지 않았으므로 다음과 같이 zsh의 glob 한정자를 사용하는 대안이 있습니다.
setopt extendedglob
재귀를 위해. 예를 들면 다음과 같습니다.
재귀적으로 일반 파일을 나열합니다.
printf '%s\n' **/*(.)
일반 파일을 재귀적으로 나열하고,영형에 의해 결정됨~에주름잡기엘길이(예: 크기):
printf '%s\n' **/*(.oL)
일반 파일을 재귀적으로 나열하고,영형에 의해 결정됨드주름 크기:
printf '%s\n' **/*(.OL)
크기가 줄어드는 순서로 일반 파일을 재귀적으로 나열하고 상위 3개 결과를 선택합니다.
printf '%s\n' **/*(.OL[1,3])
파일 크기도 원하면 다음을 사용할 수 있습니다.
du -hb **/*(.OL[1,3])
답변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
답변4
빠른 대화형 사용을 위해너무 크지 않은 디렉토리 트리에서는shopt -s globstar
정말 좋아요. glob은 유형에 따라 디렉터리를 필터링할 수 없지만, ls -d
then 과 함께 사용하면 ls
내용 대신 디렉터리 이름만 인쇄합니다.
ll
별칭에 다음이 포함되어 있다고 가정합니다 -lh
.
# with shopt -s globstar in your .bashrc
ll -rSd **/*
내 code-golf 디렉토리에서 이와 같은 출력을 제공하지만 색상 강조 표시가 있습니다(그래서 디렉토리를 더 쉽게 볼 수 있습니다). 파일 크기별 정렬은 하위 디렉터리 전체에서 발생했습니다.
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'
파일 이름에 패턴이 있는 경우 디렉터리가 아닌 파일만 일치하는 glob을 사용할 수도 있습니다. 예를 들어 ll -rSd **/*.jpg
, 또는 **/*.*
디렉토리 이름이 없고 .
원하는 모든 파일이 있는 경우에도 작동합니다.하다.
(DOS 배경을 가진 사람들의 경우: Unix에는 마법 같은 것이 없습니다 *.*
. 문자 그대로 점이 포함된 모든 디렉토리 항목과 일치합니다. 그러나 실행 파일 및 때로는 텍스트 파일 외에는 파일 이름에 확장자를 지정하는 것이 일반적입니다.)
shopt -s dotglob
@dessert는 일치 해야 한다고 지적합니다.모두파일.
GNU와 함께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
, 일명 은 인쇄물 --human-numeric-sort
과 같은 크기 접미사를 사용하여 숫자를 정렬합니다 . du -h
와 함께 사용하기에 적합합니다 du
.
나는 종종 디렉토리만 얻기 위해 du -sch * | sort -h
, 또는 를 사용합니다.*/
du -sch **/* | sort -h
du
옵션이 있다는 것을 잊은 경우 위의 출력이 제공됩니다 -a
.
(답변을 올리기 때문에 찾아보는 시간만 가졌습니다. 대화식으로 사용하려면 아마도 du -sch **/*
.