du -sh --exclude={}의 cat/echo 명령으로 인해 실행 시간이 길어지고 예상대로 작동하지 않습니다.

du -sh --exclude={}의 cat/echo 명령으로 인해 실행 시간이 길어지고 예상대로 작동하지 않습니다.

나는 이 페이지를 좋아하며 여기에서 답을 찾을 수 있었으면 좋겠습니다.

그래서 특정 파일 시스템(일부 요구 사항에 따라 동적으로 생성된 저장된 파일에 저장함)에서 일부 디렉터리를 제외한 모든 디렉터리의 디스크 사용량을 확인하고 싶습니다.

하지만 제외 명령에 값을 직접 하드코딩하면 속도가 매우 빠르고 결과도 정확하다는 것을 관찰했습니다. 하지만 제외 명령에 명령을 전달할 때. 이 작업은 시간이 더 많이 걸리고 잘못된 결과를 낳습니다. 항상 하드코딩하고 싶지는 않습니다. 제안해 주세요.

인코딩된 버전(a, b는 하위 디렉터리) - 올바른 결과 제공

du -sh --exclude={a,b} filesystem/*

명령 버전

a 및 b 디렉터리 이름이 포함된 파일(directory_list.txt)이 있다고 가정해 보겠습니다.

du -sh --exclude={`cat directory_list.txt`} /filesystem/*

또 생각나는 점은 제외로 인해 정확하고 시의적절한 결과가 나오지 않기 때문에 원하는 디렉터리만 선택하면 된다는 것입니다.

다음과 같이

ls filesystem/ | grep -v $(cat directory_list.txt) > selected.txt  --

디렉터리를 제외하고 필요한 디렉터리만 선택하세요.

du -sh $(cat selected.txt)

하지만 더 나은 방법과 내 명령이 제외 명령에서 작동하도록 하는 방법을 제안해 주세요. 감사합니다 Muhammad

답변1

Linux의 명령 du(사용 중인 것으로 보임)은 다음 --exclude-from옵션을 제공합니다.

du -h -s --exclude-from=directory_list.txt /filesystem/*

또는

du -h -s -X directory_list.txt /filesystem/*

이는 파일 directory_list.txt에 제외되어야 하는 한 줄당 하나의 쉘 와일드카드 패턴(정규식이 아님)이 포함되어 있다고 가정합니다. 이러한 패턴은 경로 이름일 수도 있고 단순히 파일이나 디렉터리 이름일 수도 있으며 셸 와일드카드 문자를 포함할 수도 있습니다.


사용 중인 명령에서 --exclude={`cat directory_list.txt`}쉘이 중괄호 확장을 사용하도록 하려고 합니다 directory_list.txt. 버팀대 확장을 수행할 때는 작동하지 않습니다.앞으로명령 대체도 고려해보세요.

너 뭐야할 수 있다du없는 경우 --exclude-from파일에서 제외하려는 항목을 배열로 읽어서 --exclude=각 요소에 추가한 다음 호출에서 해당 배열을 사용하면 됩니다 du.

exclude=()
while IFS= read -r item; do
    exclude+=( --exclude="$item" )
done <directory_list.txt

du -h -s "${exclude[@]}" /filesystem/*

--exclude-from이는 파일이 한 줄에 하나의 패턴을 포함한다고 가정합니다 .

사용 중인 셸이 배열을 지원하지 않는 경우 입력 수를 줄일 수 있습니다.

set --
while IFS= read -r item; do
    set -- "$@" --exclude="$item"
done <directory_list.txt

du -h -s "$@" /filesystem/*

이는 명명된 배열 대신 위치 인수 목록을 사용합니다.

두 루프 모두 경로 이름의 공백도 보존하고 쉘이 파일 이름 글로빙 패턴을 잘못 확장하는 것을 허용하지 않습니다. 이는 명령과 관련된 몇 가지 문제입니다 grep -v $(cat directory_list.txt). 또 다른 것은 파일의 경로 이름 대부분을 grep검색할 파일에 전달한다는 것입니다. 제외할 패턴 대신).

답변2

이것은 귀하의 질문에 정확히 대답하지는 않지만 때로는 사람들이 du -sh디스크 점유를 찾기 위해 경련을 일으키는 경우가 있습니다.

이 경우 ncdu 도구 사용을 고려해야 합니다. 저주 기반이며 빠르며 화살표 키를 사용하여 트리를 탐색하면 소비된 총 디스크 공간을 기준으로 모든 것을 정렬합니다.

관련 정보