O'Reilly logo

bash Cookbook by Cameron Newham, JP Vossen, Carl Albing

Stay ahead with the world's most comprehensive technology and business learning platform.

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

Start Free Trial

No credit card required

Loading Your MP3 Player

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         echoloading $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.

Start Free Trial

No credit card required