임의의 폴더가 여러 개 있는데 그 중 일부는 숨겨져 있습니다(마침표로 시작). 크기별로 정렬하여 모두 나열하고 싶습니다.
내 마음 속에는 다음과 같은 생각이 있습니다.
ls -d -1 -a */ | xargs du -s | sort
하지만 ls ...
해당 부분에는 숨겨진 파일이 표시되지 않습니다. 이전에 동일한 주제에 관해 몇 가지 질문을 받은 것으로 알고 있지만 답변에는 숨겨진 파일을 포함하는 방법이 포함되지 않았습니다. 또는 긴 형식을 사용하므로 출력이 나머지 명령과 호환되지 않게 됩니다.
답변1
ls
다음의 출력을 구문 분석합니다.항상 문제가 있다. 출력을 자동으로 처리하려면 항상 다른 도구를 사용해야 합니다.
특정한 경우에는 누락되거나 호환되지 않는 인수 때문에가 아니라 ls
보낸 glob 때문에 명령이 실패합니다. ls
숨겨진 결과를 포함하여 모든 결과가 나열되도록 요청한 다음 즉시 전역 패턴과 일치하는 결과 -a
만 나열하도록 요청합니다.*/
아니요시작하는 것과 수행될 수 있는 .
모든 것을 일치시키는 것은 ls
전역과 일치하는 것으로 제한됩니다. 숨겨진 디렉터리를 일치시키기 위한 두 번째 glob 으로 사용할 수도 있고 .*/
, glob 전체를 유지하여 ls
작업을 수행하도록 할 수도 있습니다. 그러나 ls
일치시킬 전역 변수가 있는 경우에는 이 작업을 수행할 필요조차 없습니다.
한 가지 해결책은 ls
완전히 건너뛰고 쉘 글로빙을 사용하는 것입니다.*
$ du -s */ .*/ | sort -n
이 예에서는 다소 과잉일 수 있지만 더 복잡한 경우에 매우 강력한 접근 방식은 다음을 사용하는 것입니다 find
.
$ find ./ -type d -maxdepth 1 -exec du -s {} + | sort -n
설명하다:
find ./
현재 디렉터리에서 찾기 작업을 시작합니다. 원하는 경우 다른 경로를 사용할 수 있습니다.-type d
디렉토리의 내용만 찾기-maxdepth 1
하위 디렉터리를 반복적으로 검색하지 않고 현재 디렉터리의 디렉터리만 찾도록 지시합니다.-exec [command] [arguments] {} +
이와 비슷하게 작동xargs
하지만find
이름을 인용하고 이스케이프할 때 모든 무거운 작업을 수행합니다. 이{}
비트는 검색 결과로 대체됩니다.du -s
알잖아
-n
* 숫자 정렬에는 for 연산자를 사용합니다. sort
이 경우 알파벳 정렬보다 숫자 정렬이 더 유용합니다.
답변2
zsh에서는 D
glob 한정자를 사용하여 파일 이름 패턴에 도트 파일을 포함합니다.
du -s -- *(D) | sort -k1n
Bash에서 도트 파일과 일치 dotglob
하도록 옵션을 설정합니다.*
shopt -s dotglob
du -s -- * | sort -k1n
ksh에서는 다른 도트 파일 만 무시 하고 다른 도트 파일은 무시 FIGNORE
하도록 설정합니다 ..?(.)
.
..
FIGNORE='.?(.)'
du -- * | sort -k1n
당신은 또한 볼 수 있습니다한 디렉터리의 모든 파일(숨겨진 파일 포함)을 다른 디렉터리로 이동하는 방법은 무엇입니까?.