Я пытаюсь использовать 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
.