Как проверить размер каталога, указанного пользователем в качестве аргумента?

Как проверить размер каталога, указанного пользователем в качестве аргумента?

Я хочу получить размер каталога, указанного пользователем в качестве аргумента. Пример:

read -p "Enter the directory" target

du -k $target

Если пользователь указывает путь как ~/Documents/dir, я получаю сообщение об ошибке:du: cannot access '~/Documents/dir': No such file or directory

А если я дам команду так:

du -k ~/Documents/dir

Я получаю желаемый результат.

Почему я не могу использовать переменные вместе с командой du?

решение1

Не расширяется ~ни после того, как он прочитан через оболочку, ни когда он помещается в duкоманду. Вы можете заставить bash выполнить расширение с помощью следующего кода:

read -p "Enter the directory" target
target=${target/#\~/$HOME}
du -k "${target}"

Это ${target/#\~/$HOME}важная часть. Она заменяет ~содержимое HOMEпеременной окружения.

Связанный контент