Извлечь unix-совместимый файл-путь с пространством из вывода команды

команда :

du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 

дает мне:

 41G /Users/user/Big folder 

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

 du -sh $HOME/* | grep '[0-9]G\>' | sort -k 1rn | head -1 | awk '{ print $2 }' 

Выйдет

 /Users/user/Big 

Что непригодно, где я ищу результат, например:

 /Users/user/Big\ folder 

POSIXLY:

 du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q" 

Без -h результат du включал равное количество для размера, поэтому мы можем легко отсортировать его без дополнительной grep .

Используя sed для выполнения удаления в первой строке только после этого, мы сохраняем вызов head .

Когда вы выполняете автоматическую обработку, не делайте вашу жизнь более сложной, используя номера в разных единицах. Не проходите мимо -h до du . Затем вы можете использовать простую численную сортировку на выходе, и ваш скрипт будет работать, если в одном из каталогов более 1 ТБ.

 du -s ~/* | sort -k 1n | tail -n1 

Это всегда выводит строку, даже если самый большой подкаталог содержит менее 1 ГБ. Если это не то, что вы хотите, вы можете заменить условный «выходной пустым» на «это число меньше порога».

Чтобы извлечь имя каталога, выполните вывод и удалите часть до первой вкладки.

 largest_directory=$(du -s ~/* | sort -k 1n | tail -n1) largest_directory_size_kB=${largest_directory%%$(printf '\t')*} # if you need the size largest_directory=${largest_directory#*$(printf '\t')} 

Еще один способ извлечь желаемый путь – через команду read после того, как вы закончите делать du материал и sort-ed их, а затем перейдите к while/read

 du.. sort.. | while read xd; do echo "$d"; done