команда :
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
решение1
При выполнении автоматизированной обработки не усложняйте себе жизнь, используя числа в разных единицах. Не переходите -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')}
решение2
ПОСИКЛИ:
du -s "$HOME"/* | sort -rnk1 | LC_ALL=C sed -e "s,[^/]*\(/.*\),'\1',;q"
Без -h
результата du
для размера будет указано простое число, поэтому мы можем легко отсортировать его без дополнительных значений grep
.
Используя sed
для выполнения удаления только первую строку, а затем выходя, мы сохраняем head
вызов.
решение3
Другой способ извлечь нужный вам путь — это использовать read
команду после того, как вы закончите делать du
все это, sort-ed
а затем передать ееwhile/read
du.. sort.. | while read x d; do echo "$d"; done