1 |
On Thursday 16 of February 2012 23:52:01 Alex-P. Natsios wrote: |
2 |
> 2012/2/16 Theo Chatzimichos <tampakrap@g.o>: |
3 |
> > Καλησπέρα, |
4 |
> > |
5 |
> > μήπως γνωρίζει κανείς κανένα τρόπο (σε bash,python,perl ή ruby) να ελέγχω |
6 |
> > αν ένα symlink είναι valid? Για καταλόγους μπορώ να τους ακολουθώ και να |
7 |
> > παίρνω το exit code μετά, για αρχεία όμως? |
8 |
> |
9 |
> θοδωρή αυτό που ζητάς και γίνετε.. και δεν γίνετε.. και είναι και |
10 |
> σχετικά περίεργο ανάλογα την πλατφόρμα. |
11 |
> για links και για τις περισσότερες πλατφόρμες (κυρίως unixοειδή ) |
12 |
> υπάρχει το readlink. |
13 |
> |
14 |
> Πρόβλημα: |
15 |
> δεν ακολουθεί δυστυχώς chain links. |
16 |
> θα σου δώσει όμως το αρχείο στο οποιο κάνει point το link |
17 |
> |
18 |
> αν έχουμε ας πούμε το symlink ( testlink -> testfile ) |
19 |
> το File.readlink("testlink") θα σου επιστρέψει testfile. |
20 |
> |
21 |
> |
22 |
> ΥΓ. τα παραπάνω ισχύουν για Ruby και Ruby on Rails. |
23 |
|
24 |
Thanks. Some dirty solutions by irc brainstorming: |
25 |
|
26 |
Python: |
27 |
|
28 |
if not os.path.islink('/path/to/symlink'): |
29 |
print "not a symlink" |
30 |
else: |
31 |
try: |
32 |
os.stat('/path/to/symlink') |
33 |
except OSError: |
34 |
print "symlink is broken" |
35 |
|
36 |
Bash: |
37 |
|
38 |
SYMLINK="/path/to/symlink" |
39 |
# Check for valid target file |
40 |
[[ -L $SYMLINK ]] && \ |
41 |
cat $SYMLINK > /dev/null 2>&1 && \ |
42 |
VALID=1 |
43 |
# Check for valid target dir |
44 |
[[ -n VALID ]] || \ |
45 |
[[ -L $SYMLINK ]] && \ |
46 |
pushd $SYMLINK > /dev/null 2>&1 && \ |
47 |
VALID=1 |
48 |
popd > /dev/null 2>&1 |
49 |
-- |
50 |
Theo Chatzimichos (tampakrap) | blog.tampakrap.gr |
51 |
Gentoo KDE/Qt, Planet, Overlays |