Removendo “espaços extras” em du -sk para o script bash?

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?

    
por DarthCaniac 09.05.2012 / 23:09

4 respostas

2

Você deseja usar awk .

dirsize='du -sk /folder/path/here | awk '{print $1}''
    
por 09.05.2012 / 23:18
1

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'
    
por 09.05.2012 / 23:23
0

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 .

    
por 09.05.2012 / 23:22
0

+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:]]) /} ...

    
por 10.05.2012 / 00:00