정렬을 통해 하위 폴더의 내용을 포함하여 디렉터리의 파일 나열

정렬을 통해 하위 폴더의 내용을 포함하여 디렉터리의 파일 나열

하위 폴더의 내용을 포함하여 파일 크기별로 정렬하여 디렉터리의 전체 내용을 나열하려고 합니다. 지금까지 나는 여전히 재귀적인 방식을 사용하면서 나열하고 정렬하는 데 성공했습니다 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

재귀를 위해. 예를 들면 다음과 같습니다.

  1. 재귀적으로 일반 파일을 나열합니다.

    printf '%s\n' **/*(.)
    
  2. 일반 파일을 재귀적으로 나열하고,영형에 의해 결정됨~에주름잡기길이(예: 크기):

    printf '%s\n' **/*(.oL)
    
  3. 일반 파일을 재귀적으로 나열하고,영형에 의해 결정됨주름 크기:

    printf '%s\n' **/*(.OL)
    
  4. 크기가 줄어드는 순서로 일반 파일을 재귀적으로 나열하고 상위 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 -dthen 과 함께 사용하면 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 -hdu옵션이 있다는 것을 잊은 경우 위의 출력이 제공됩니다 -a.

(답변을 올리기 때문에 찾아보는 시간만 가졌습니다. 대화식으로 사용하려면 아마도 du -sch **/*.

관련 정보