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