tazlito rev 305

tazlito/deduplicate: ln may fail
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Feb 02 10:38:08 2013 +0100 (2013-02-02)
parents 096e6ef4b9cc
children 04a0a9b9df91
files tazlito
line diff
     1.1 --- a/tazlito	Sun Jan 27 03:32:16 2013 -0200
     1.2 +++ b/tazlito	Sat Feb 02 10:38:08 2013 +0100
     1.3 @@ -376,21 +376,26 @@
     1.4  # Deduplicate files (MUST be on the same filesystem).
     1.5  deduplicate()
     1.6  {
     1.7 -	find "$@" -type f -size +0c -exec stat -c '%s-%a-%u-%g %i %h %n' {} \; | \
     1.8 -	   sort | ( save=0; old_attr=""; old_inode=""; old_link=""; old_file=""
     1.9 +	find "$@" -type f -size +0c -xdev \
    1.10 +		-exec stat -c '%s-%a-%u-%g %i %h %n' {} \; | sort | \
    1.11 +	( save=0; old_attr=""; old_inode=""; old_link=""; old_file=""
    1.12  	   while read attr inode link file; do
    1.13 -	   	   [ -L "$file" ] && continue
    1.14 -		   if [ "$attr" = "$old_attr" -a "$inode" != "$old_inode" ]; then
    1.15 -			   if cmp "$file" "$old_file" >/dev/null 2>&1 ; then
    1.16 -				   rm -f "$file"
    1.17 -				   ln "$old_file" "$file"
    1.18 -				   inode="$old_inode"
    1.19 -				   [ "$link" = "1" ] && save="$(expr $save + ${attr%%-*})"
    1.20 -			   fi
    1.21 -		   fi
    1.22 -		   old_attr="$attr" ; old_inode="$inode" ; old_file="$file"
    1.23 +		[ -L "$file" ] && continue
    1.24 +		if [ "$attr" = "$old_attr" -a "$inode" != "$old_inode" ]; then
    1.25 +			if cmp "$file" "$old_file" >/dev/null 2>&1 ; then
    1.26 +				rm -f "$file"
    1.27 +				if ln "$old_file" "$file" 2> /dev/null; then
    1.28 +					inode="$old_inode"
    1.29 +					[ "$link" = "1" ] && 
    1.30 +					save="$(($save+(${attr%%-*}+512)/1024))"
    1.31 +				else
    1.32 +					cp "$old_file" "$file"
    1.33 +				fi
    1.34 +			fi
    1.35 +		fi
    1.36 +		old_attr="$attr" ; old_inode="$inode" ; old_file="$file"
    1.37  	   done
    1.38 -	   echo "$save bytes saved in duplicate files."
    1.39 +	   echo "$save Kbytes saved in duplicate files."
    1.40  	)
    1.41  }
    1.42  
    1.43 @@ -2126,7 +2131,9 @@
    1.44  			  printf("%s ",$i) }' < /etc/tazlito/rootfs.list)"
    1.45  			sed -i "s/ *//;s/)/), flavors $FLAVOR_LIST/" \
    1.46  			  $ROOTCD/boot/isolinux/isolinux.msg 2> /dev/null
    1.47 -			[ -f $ROOTCD/boot/isolinux/ifmem.c32 ] ||
    1.48 +			[ -f $ROOTCD/boot/isolinux/ifmem.c32 -o \
    1.49 +			  -f $ROOTCD/boot/isolinux/c32box.c32 ] ||
    1.50 +			cp /boot/isolinux/c32box.c32 $ROOTCD/boot/isolinux 2> /dev/null ||
    1.51  			cp /boot/isolinux/ifmem.c32 $ROOTCD/boot/isolinux
    1.52  			n=0
    1.53  			last=$ROOTFS