[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hardlinks verwenden ZWISCHENERGEBNIS


On Fri, Aug 14, 2009 at 02:39:23PM +0200, Werner Holtfreter wrote:
> > Wie kann man nachtraeglich feststellen, wo bzw. in welchen
> > Verzeichnissen die zusammengehoerigen Hardlinks stecken?
> 
> Fuer dieses Problem wurde hier und in de.comp.os.unix.shell
> eine gute Loesung gefunden:
> 
> find . -maxdepth 1 -xdev ! -type d -links +1 -exec sh -c 'echo;ls -l -- "$1";find ~/ -xdev -samefile "$1"' sh {} \;;echo

Diese Loesung finde ich sehr strange (auch wenn sie funktionieren mag).

Ich haette folgende Idee anzubieten:

gfind . -links +1 -type f -printf "%i|%p\n" > hardlinks.out

Das erzeugt hier zB folgenden Output:

12765612|./A
12765612|./B
12765612|./C
12765599|./a
12765599|./b

(d.h. nur alle Inodes vom Typ "Datei", die mehr als einen Link haben)

Wenn Du nun wissen willst, welches die anderen Hardlinks von ./C sind,
dann fragst Du das so ab:

---[suche.sh] ------------------------------------------
#! /bin/sh
if [ $# -ge 1 ]; then
  while [ -n "$1" ]; do
    SUCHE="$1"
    INODES="$(grep -F "|${SUCHE}" hardlinks.out | grep -o "[^|]*")"
    for I in $INODES; do 
      echo "Hardlinks auf $SUCHE (${I}):"
      < hardlinks.out grep "^${I}|"  | cut -f 2- -d "|"
    done
    shift
  done
else
  echo "$0 Datei(pattern)"
fi
---------------------------------------------

$ ./suche.sh ./C
Hardlinks auf ./C (12765612):
./A
./B
./C

Man koennte das auch mit Arrays in awk loesen. Das muesste ich aber erst
ausknobeln.

Gruss
Raphael

-- 
Raphael Becker <rabe@xxxxxxxxx>                   http://rabe.uugrn.org/
                             https://www.xing.com/profile/Raphael_Becker
GnuPG:                E7B2 1D66 3AF2 EDC7 9828  6D7A 9CDA 3E7B 10CA 9F2D
.........|.........|.........|.........|.........|.........|.........|..



--
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: http://wiki.uugrn.org/wiki/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/