Reputation: 1541
I want to write a script that fills a directory with music until there's a certain amount of space left. The directory may be on various partitions and I don't know how to ask a directory for free space or it's partition.
pseudocode
fill(directory)
until < 100 mb of free space in directory
copy music to directory
How would you do it using unix tools like bash, find, etc.
Upvotes: 0
Views: 4124
Reputation: 4557
Linux's df
will tell you exactly that. To find the free space on the volume a folder resides in, execute:
df -h /home/chris/directory
Output:
Filesystem Size Used Avail Use% Mounted on
server:/vol/home 2.0T 1.3T 759G 63% /home/chris
Omit the -h
flag to get raw bytes instead of the human-readable K/M/G/T.
EDIT Just because I'm bored, I went ahead and wrote a script for you:
#!/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
Upvotes: 3
Reputation: 176
I assume you mean you have a specific directory, on a specific partition that you wish to fill until there is only 100 MB left.
The df command will return the amount of disk space left on a given directory's disk/partition.
df musicfolder/
The fourth column will give free space
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 151733412 24153792 119871924 17% /
you can use awk to gain the fourth column value and ignore the headers. So your script will be something like:
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
Upvotes: 3