Results 1 to 4 of 4

Thread: small script to re-hardlink *ALL* equal files

  1. #1
    Junior Member
    Join Date
    Jan 2003
    Posts
    3

    small script to re-hardlink *ALL* equal files

    Have fun, this is not well tested, it will prolly work fine with readonly CD-Images but certainly have problems with hd-installs since there are equal files which *should not* be hardlinked! Take care.
    One could probably add filters to the 'find' command to exclude such files. Since I did this as fast hack for CD remastering so i have no need for better selections. I'm working on a much more advanced file-unifier for the vserver project. When that is finished i will announce it here too (ETA: Mid Feburary, i'm in hollyday next time)

    Results (compressed image):
    691M Jan 2 13:49 KNOPPIX.new
    664M Jan 2 17:25 KNOPPIX.new.unified



    PS: Klaus ... if you use this for the main Knoppix, the free space you get is dedicated for a recent version of 'distcc', thanks.

    Code:
    #!/bin/sh
    
    find $1 -type f -exec md5sum {} \; |\
    sort +0 |\
    {
            read sum file;
            while [ "$sum" != "" ]; do
                    while read sum2 file2 && [ $sum = $sum2 ]; do
                            ln -f "$file" "$file2"
                    done
                    sum=$sum2
                    file="$file2"
            done
    }

  2. #2
    Junior Member registered user
    Join Date
    Dec 2002
    Location
    Germany
    Posts
    22

    Re: small script to re-hardlink *ALL* equal files

    Quote Originally Posted by cehteh
    Have fun, this is not well tested, it will prolly work fine with readonly CD-Images but certainly have problems with hd-installs since there are equal files which *should not* be hardlinked! Take care.
    One could probably add filters to the 'find' command to exclude such files. Since I did this as fast hack for CD remastering so i have no need for better selections. I'm working on a much more advanced file-unifier for the vserver project. When that is finished i will announce it here too (ETA: Mid Feburary, i'm in hollyday next time)

    Results (compressed image):
    691M Jan 2 13:49 KNOPPIX.new
    664M Jan 2 17:25 KNOPPIX.new.unified



    PS: Klaus ... if you use this for the main Knoppix, the free space you get is dedicated for a recent version of 'distcc', thanks.

    Code:
    #!/bin/sh
    
    find $1 -type f -exec md5sum {} \; |\
    sort +0 |\
    {
            read sum file;
            while [ "$sum" != "" ]; do
                    while read sum2 file2 && [ $sum = $sum2 ]; do
                            ln -f "$file" "$file2"
                    done
                    sum=$sum2
                    file="$file2"
            done
    }
    This looks a little dangerous. Do you realize that this makes all empty (0 bytes) files hardlinks to each other, even locks and logfiles? Also, some files with the same checksum may NOT be actually the same file or have desirably the same contents.

    I use a harddisk-installed Debian system that should have all hardlinks intact. If you copied your system from CD, this may not always be the case. You should use rsync -Ha for copying to preserve the hardlinks.

    -KK

  3. #3
    Junior Member
    Join Date
    Jan 2003
    Posts
    3
    sure .. i know it is a fast hack ... the next tool (vserver unifier) will be much better. Resolving *All* problems u showed.

    >This looks a little dangerous. Do you realize that this makes all empty (0 bytes) files hardlinks to each other,

    use '! -size 0' within the find

    > locks and logfiles
    there are no locks when mastering,
    logs are not important when kept only in ram ..
    ! -path '*/var/log*' will fix it anyways

    >Also, some files with the same checksum may NOT be actually the same file or have desirably the same contents.
    with md5sum the chance of doubletes are microscopic (even less), but you are right .. for the vserver unifier i dont use checksuming

    remember this is meant as fast hack and to show a 'general' concept for reducing the diskusage of knoppix.

    cheers :)

  4. #4
    Junior Member
    Join Date
    Jan 2003
    Posts
    3

    last update

    - compares files
    - only hardlink files which are not hardlinked yet
    - permission and uid/gid must be equal
    - size 0 files are excluded
    - can be called with multiple arguments which are used directly by find
    - writes a script which can be used to undo all hardlinks

    i will not do any more updates on this and focus on the vserver unifier now (it will get a small control language and tons of more sophisticated options)


    example usage:
    ./knoppix.unify Path/To/KNOPPIX ! -path "*/var/log/*" >undo_hardlinks.sh

    File knoppix.unify:
    Code:
    #!/bin/bash
    
    find "$@" -type f ! -size 0 -exec md5sum {} \; |\
    sort +0 |\
    {
            read sum file;
            while [ "$sum" != "" ]; do
                    while read sum2 file2 &&\
                            [ $sum = $sum2 ] &&\
                            [ $(cut -d " " -f 1 <(ls -i "$file")) != $(cut -d " " -f 1 <(ls -i "$file2")) ] &&\
                            [ $(cut -c -32 <(ls -ln "$file")) = $(cut -c -32 <(ls -ln "$file2")) ] &&\
                            cmp "$file" "$file2";
                    do
                            ln -f "$file" "$file2" &&
                            echo "rm -f \"$file2\"; cp -pf \"$file\" \"$file2\""
                    done
                    sum=$sum2
                    file="$file2"
            done
    }

Similar Threads

  1. Small Remaster
    By fizgig in forum Customising & Remastering
    Replies: 1
    Last Post: 09-30-2004, 03:35 AM
  2. HD too small
    By brazilian in forum General Support
    Replies: 2
    Last Post: 04-09-2004, 06:10 PM
  3. Small USB/camera problem.
    By spydie in forum General Support
    Replies: 14
    Last Post: 01-31-2004, 07:55 PM
  4. HOWTO: Script to burn MP3 files to CD
    By Dave_Bechtel in forum General Support
    Replies: 0
    Last Post: 06-04-2003, 11:54 AM
  5. Small nix
    By .-=Ronin=-. in forum General Support
    Replies: 2
    Last Post: 04-24-2003, 07:45 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Dell PowerEdge R730XD 28 Core Server 2X Xeon E5-2680 V4 H730 32GB RAM No HDD picture

Dell PowerEdge R730XD 28 Core Server 2X Xeon E5-2680 V4 H730 32GB RAM No HDD

$378.93



Dell EMC PowerEdge R440 Xeon silver 4215 2.5GHz 16 GB ram  2x 550W PSU No HDD picture

Dell EMC PowerEdge R440 Xeon silver 4215 2.5GHz 16 GB ram 2x 550W PSU No HDD

$275.00



Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Cores / 64gb / Raid / 2x 1Tb picture

Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Cores / 64gb / Raid / 2x 1Tb

$374.99



Dell PowerEdge R240 Intel Xeon E-2224 3.50GHz 8GB DDR4 ECC NO HDD 250W picture

Dell PowerEdge R240 Intel Xeon E-2224 3.50GHz 8GB DDR4 ECC NO HDD 250W

$285.97



Dell Poweredge R810 4x Xeon X7560 2.26ghz 32-Cores | 256GB | 3x Trays | H700 picture

Dell Poweredge R810 4x Xeon X7560 2.26ghz 32-Cores | 256GB | 3x Trays | H700

$289.99



Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Core | HBA330 | No RAM or HDD picture

Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Core | HBA330 | No RAM or HDD

$149.99



Dell Poweredge R730xd 12LFF 2*2660v4 4*1Gbe h730 2x 750W Server CTO picture

Dell Poweredge R730xd 12LFF 2*2660v4 4*1Gbe h730 2x 750W Server CTO

$488.00



Dell PowerEdge C4130 1U AI GPU Server | 2x E5-2690 v3 | 64gb Ram | 2x 1600W picture

Dell PowerEdge C4130 1U AI GPU Server | 2x E5-2690 v3 | 64gb Ram | 2x 1600W

$524.99



Dell PowerEdge R530 2x E5-2630v4 H330 iDRAC8 Port Card Riser No PSU/RAM/HDD picture

Dell PowerEdge R530 2x E5-2630v4 H330 iDRAC8 Port Card Riser No PSU/RAM/HDD

$99.99



Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Cores | 32gb | HBA330 | 2x 1... picture

Dell Poweredge R630 2x Xeon E5-2680 v3 2.5ghz 24-Cores | 32gb | HBA330 | 2x 1...

$324.99