## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

## Problem

You have a collection of MP3 files that you would like to put in your MP3 player. But you have more music than can fit on your MP3 player. How can you load your player with music without having to baby-sit it by dragging and dropping files until it is full?

## Solution

Use a shell script to keep track of the available space as it copies files onto the MP3 player, quitting when it is full.

` 1 #!/usr/bin/env bash 2 # cookbook filename: load_mp3 3 # Fill up my mp3 player with as many songs as will fit. 4 # N.B.: This assumes that the mp3 player is mounted on /media/mp3 5 # 6 7 # 8 # determine the size of a file 9 # 10 function FILESIZE () 11 { 12 FN=\${1:-/dev/null} 13 if [[ -e \$FN ]] 14 then 15 # FZ=\$(ls -s \$FN | cut -d ' ' -f 1) 16 set -- \$(ls -s "\$FN") 17 FZ=\$1 18 fi 19 } 20 21 # 22 # compute the freespace on the mp3 player 23 # 24 function FREESPACE 25 { 26 # FREE=\$(df /media/mp3 | awk '/^\/dev/ {print \$4}') 27 set -- \$(df /media/mp3 | grep '^/dev/') 28 FREE=\$4 29 } 30 31 # subtract the (given) filesize from the (global) freespace 32 function REDUCE () 33 (( FREE-=\${1:-0})) 34 35 # 36 # main: 37 # 38 let SUM=0 39 let COUNT=0 40 export FZ 41 export FREE 42 FREESPACE 43 find . -name '*.mp3' -print | \ 44 (while read PATHNM 45 do 46 FILESIZE "\$PATHNM" 47 if ((FZ <= FREE)) 48 then 49 echo loading \$PATHNM 50 cp "\$PATHNM" /media/mp3 51 if (( \$? == 0 )) 52 then 53 let SUM+=FZ 54 let COUNT++ 55 REDUCE \$FZ 56 else 57 echo "bad copy of \$PATHNM to /media/mp3" 58 rm ...`

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required