Назад | Перейти на главную страницу

Удаление «лишних пробелов» в du -sk для сценария bash?

Я пытаюсь использовать du -sk получить размер двух папок

dirsize_temp=`du -sk /folder/path/here`

а затем оператор if для сравнения размеров. Единственная проблема в том, что когда вы запускаете команду, она возвращает что-то вроде

123456         /folder/path/here

Я сейчас использую

dirsize=${dirsize_temp%%/*}

раздеть "/folder/path/here"часть, но мне не удается избавиться от пробелов. Они не кажутся актуальный пробелы, так что "${dirsize//\ /}" или "${dirsize// /}"не работает, чтобы удалить их, но они по-прежнему не позволяют мне сравнивать две переменные. Есть ли какой-то escape-символ, который мне не хватает, или более простой способ получить размер двух папок без дополнительных вещей, прикрепленных к концу?

Вы хотите использовать awk.

dirsize=`du -sk /folder/path/here | awk '{print $1}'`

Обычно это вкладка. (в большинстве систем posix есть hexdump или более краткое имя xxd, которое покажет вам напечатанные символы). Более эффективное решение, чем awk, - это 'cut':

 dirsize=`du -sk /folder/path/here | cut -f1`

+1 за демонстрацию синтаксиса подстановки регулярных выражений, вы узнаете что-то новое каждый день! Не возражайте, если бы я исследовал это из-за этого, а теперь добавлю $ {var // + ([[: space:]]) /} ...

du выводит символ TAB (ASCII 9) в качестве разделителя. Вы можете убедиться в этом, направив вывод в xxd или od -cx. Следовательно, вам нужно dirsize=${dirsize_temp/TAB*/}. Вы можете ввести буквальный символ TAB в приглашении bash или в ViM, нажав Ctrl-V затем TAB.