Команда du
в Linux, которую вы используете, предлагает опцию --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
как файлы для поиска, а не как шаблоны для исключения ).
Это не дает точного ответа на ваш вопрос, но иногда люди делают конвульсии с du -sh
в попытках найти дисковую свинью.
Если это так, вам следует рассмотреть инструмент ncdu. Он основан на проклятиях и быстр, и будет сортировать все по общему дисковому пространству, когда вы перемещаетесь по дереву с помощью клавиш со стрелками.