Você deseja usar awk
.
dirsize='du -sk /folder/path/here | awk '{print $1}''
Estou tentando usar du -sk
para obter o tamanho de duas pastas
dirsize_temp='du -sk /folder/path/here'
e, em seguida, uma declaração if para comparar os tamanhos. O único problema é que quando você executa o comando, ele retorna algo como
123456 /folder/path/here
Atualmente estou usando
dirsize=${dirsize_temp%%/*}
para remover a parte " /folder/path/here
", mas estou tendo problemas para me livrar dos espaços. Eles não parecem ser espaços reais , então " ${dirsize//\ /}
" ou " ${dirsize// /}
" não funciona para removê-los, mas eles ainda me impedem de comparar duas variáveis. Existe algum caractere de escape que estou perdendo, ou uma maneira mais fácil de obter o tamanho de duas pastas sem material adicional no final?
Geralmente é uma guia. (a maioria dos sistemas posix tem o hexdump, ou o xxd mais sucinto que mostraria os caracteres impressos). Uma solução mais eficiente que o awk é 'cortar':
dirsize='du -sk /folder/path/here | cut -f1'
du
produz um caractere TAB (ASCII 9) como o delimitador. Você pode verificar isso canalizando a saída para xxd
ou od -cx
. Portanto, você precisa de dirsize=${dirsize_temp/TAB*/}
. Você pode digitar um caractere TAB literal no prompt do bash ou no ViM pressionando Ctrl-V
, em seguida, TAB
.
+1 para demonstrar essa sintaxe de substituição do regex, você aprende algo novo todos os dias! Se importe se eu pesquisei por causa disso e agora um acima com $ {var // + ([[: space:]]) /} ...