1#!/bin/bash 2 3if [ $# -eq 0 ] || [ ! -f $1 ]; then 4 echo "Usage: $0 <playlist> [partition]" 5 exit 1 6fi 7 8if [ "x$2" = "x" ]; then 9 dev=$(mount | grep "on / " | cut -d ' ' -f 1) 10else 11 dev=$2 12fi 13 14in=$1 15out=${in%.playlist}.logical_playlist 16 17echo "Using $dev as the root device" 18echo "Converting $in to $out" 19 20blocks=$(mktemp /tmp/blocks.XXXXXX) 21files=$(mktemp /tmp/files.XXXXXX) 22sorted=$(mktemp /tmp/sorted.XXXXXX) 23 24echo -n "Getting blocks from $in ..." 25sudo BootCacheControl -f $in print | egrep '^([0-9A-F]){8}-' |\ 26 awk '{for (i = 0;i < $3; i += 4096) {print ($2+i)/512}}' > $blocks 27echo " done." 28 29echo -n "Finding files on disk..." 30sudo fsck_hfs -B $blocks -f $dev > $files 31echo " done." 32 33echo -n "Sorting..." 34grep ROOT_OF_VOLUME $files | cut -d '"' -f 2 | sed 's/ROOT_OF_VOLUME//' | sort -u > $sorted 35echo " done." 36 37echo -n "Filtering out non files..." 38( 39 while read file; do 40 if [ -f "$file" ]; then echo $file; fi 41 done 42) <$sorted >$out 43echo " done." 44 45rm $blocks 46rm $files 47rm $sorted 48