Respostas:
A saída pode ser um pouco mais fácil de analisar usando a -Popção que garantirá que:
- As informações sobre cada sistema de arquivos são sempre impressas em exatamente uma linha; um dispositivo de montagem nunca é colocado em uma linha sozinho. Isso significa que, se o nome do dispositivo de montagem tiver mais de 20 caracteres (por exemplo, para algumas montagens de rede), as colunas ficarão desalinhadas.
Isso facilita muito a obtenção do espaço livre disponível:
$ df -Ph . | tail -1 | awk '{print $4}'
( -husa megabytes, gigabytes e assim por diante. Se o seu sistema não possuir, use -ksomente para kilobytes.)
Se passarmos dfum caminho, ele retornará apenas duas linhas: uma linha de cabeçalho e, em seguida, os dados sobre o sistema de arquivos que contém o caminho. Podemos usar a cauda para pegar apenas a segunda linha. Sabemos que o espaço disponível está na 4ª coluna, então pegamos isso com awk. Tudo isso pode ser feito com awk:
$ df -Ph . | awk 'NR==2 {print $4}'
ou muitos outros conjuntos de filtros .
$PWDvez de usar a substituição de comandos e remover a necessidade de cauda: df -Ph $PWD | awk 'NR==2{print $4}'
awké melhor. Incluí o comando mais longo porque queria ter um exemplo de como alguém pode construir uma cadeia de comandos simples para fazer algo mais complicado. Atualizei a resposta para incluir sua melhoria.
-Pé padrão (o Pé para POSIX). Mas -hé uma extensão GNU (também existe em alguns outros sistemas, mas, por exemplo, no OpenBSD é incompatível com -P).
df -h --output=avail . | tail -1
time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }) não revela diferença significativa na velocidade, o que não é surpreendente - invocar tailnão é caro e awkserá poupado para pular para o final da entrada ... Pode ter havido uma diferença em o PDP-11 ... #
Em bytes:
df --output=avail -B 1 "$PWD" | tail -n 1
Legível por humanos:
df --output=avail -h "$PWD" | tail -n 1
ou
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"
ou
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
du -h?