Как найти объем пространства в каталоге или в каталоге раздела в - PullRequest
0 голосов
/ 26 октября 2011

Я хочу написать скрипт, который заполняет каталог музыкой, пока не останется определенное количество места.Каталог может находиться в разных разделах, и я не знаю, как запросить у каталога свободное место или его раздел.

pseudocode
fill(directory)
  until < 100 mb of free space in directory
    copy music to directory

Как бы вы это сделали, используя инструменты Unix, такие как bash, find и т. Д.1004 *

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Полагаю, вы имеете в виду, что у вас есть определенный каталог в определенном разделе, который вы хотите заполнить, пока не останется только 100 МБ.

Команда df вернет количество дискового пространства, оставшегося на диске / разделе данного каталога.

df musicfolder/

Четвертый столбец даст свободное пространство

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1            151733412  24153792 119871924  17% /

вы можете использовать awk для получения значения четвертого столбца и игнорирования заголовков. Таким образом, ваш сценарий будет выглядеть примерно так:

freespace=$(df /musicfolder | awk 'FNR>1{print $4}')

while [ $freespace -gt 10000000 ] ; do
    (copy files from wherever)
    freespace=$(df ~/musicfolder | awk 'FNR>1{print $4}')
done
3 голосов
/ 26 октября 2011

Linux df скажет вам именно это. Чтобы найти свободное место на томе, в котором находится папка, выполните:

df -h /home/chris/directory

Выход:

Filesystem            Size  Used Avail Use% Mounted on 
server:/vol/home      2.0T  1.3T  759G  63% /home/chris

Опустите флаг -h, чтобы получить необработанные байты вместо удобочитаемого K / M / G / T.

РЕДАКТИРОВАТЬ Только потому, что мне скучно, я решил написать сценарий для вас:

#!/bin/bash
fillDir='/mnt/fillMe'
musicFile='/home/chris/Yakety Sax.mp3'

while [ `df -P "$fillDir" | awk 'NR==2{print $4}'` -gt 100000000 ]
do
  echo `df -Ph "$fillDir" | awk 'NR==2{print $4}'` space left.
  cp "$musicFile" "$fillDir"
done
...