심볼릭 링크를 사용하여 폴더의 디스크 사용량 찾기

심볼릭 링크를 사용하여 폴더의 디스크 사용량 찾기

저는 Debian 서버에서 작업 중이며 sudo 없이는 콘솔에만 액세스할 수 있습니다. "Applications"라는 기본 폴더에는 내가 가지고 있는 모든 프로젝트가 포함된 하위 폴더가 포함되어 있습니다.

하지만 관리자 패널을 통해 새 프로젝트를 생성할 때 폴더 이름은 의미 없는 문자열이므로 새 폴더에 대한 심볼릭 링크를 생성하여 이름을 바꿀 수 있습니다.

예를 들어, 애플리케이션 폴더는 다음과 같습니다.

applications/
    abuwryjbrb
    evharjqgxj
    MyCustomProjectName1
    MyCustomProjectName2

각 애플리케이션이 얼마나 많은 공간을 사용하고 있는지 확인하고 싶습니다. 나는 Unix에 대한 경험이 많지 않기 때문에 그것을 구글링하여 du -sh *.

그러나 출력은 다음과 같습니다.

91M     abuwryjbrb
201M    evharjqgxj
0       MyCustomProjectName1
0       MyCustomProjectName2

그러다 보니 이름을 하나하나 확인하고 어느 폴더가 어느 폴더인지 확인해야 하는데 시간이 너무 많이 걸립니다.

심볼릭 링크의 디스크 사용량을 출력하는 방법이 있습니까?

대신 du -sh -L *원본 폴더와 심볼릭 링크의 중복 폴더를 얻지 못하고 다음과 같이 혼합된 출력을 얻습니다.

91M     abuwryjbrb
201M    MyCustomProjectName1

이러한 폴더 중 일부에는 원래 이름이 있고 일부에는 심볼릭 링크 이름이 있습니다.

답변1

-L플래그와 du명령을 사용하여 기호 링크를 사용할 수 있습니다 . du -sh -L *당신을 도와야합니다.

답변2

du -sh -l -- */

후행 슬래시는 디렉토리와 디렉토리에 대한 기호 링크의 와일드카드 일치를 활성화합니다. 디렉토리에 대한 심볼릭 링크의 경우 이 명령은 대상에서 작동합니다.

-l(GNU 확장자 등 -h) du특정 파일/디렉토리에 대한 디스크 사용량이 한 번만 계산되는 비활성화된 동작입니다. 각 프로젝트 내에 하드 링크가 존재하는 경우 보고된 디스크 사용량에도 영향을 미칩니다.

프로젝트는 각 디렉터리에 대해 한 번씩, 심볼릭 링크에 대해 한 번씩, 두 번 나열됩니다. 자신의 이름에만 일치하는 와일드카드 패턴을 만드는 쉬운 방법이 있다면 이 문제를 피할 수 있습니다. 예를 들어, 이름을 항상 대문자로 쓰고 자동 이름이 항상 소문자인 경우 다음을 사용할 수 있습니다.

du -sh [[:upper:]]*/

또는 다음을 사용할 수 있습니다.

du -shHl -- *

여기에는 일반 파일도 나열됩니다. 이 옵션 -H( -DGNU에서는 표준 옵션 du이라고도 함 ) 은 명령줄에 전달된 기호 링크를 역참조하도록 -H지시합니다 . du각 디렉토리 트리 내의 기호 링크는 통과되지 않습니다( -L여기서는 좋은 생각이 아닌 과 달리).

zsh에서는 사용할 수 있습니다

du -shH -- *(@-/)

디렉토리에 대한 기호 링크에서만 작동하거나 du -shH -- *(@)대상에 관계없이 기호 링크에서만 작동합니다. 이번에는 -l동일한 디렉터리에 대한 여러 개의 심볼릭 링크가 없으면 생략할 수 있습니다.

모든 셸에서(그리고 GNU 사용 find) 다음을 사용할 수 있습니다.

find . -maxdepth 1 -type l -xtype d -exec du -shH {} +

디렉토리에 대한 심볼릭 링크에서만 작동합니다.

관련 정보