Czy istnieje sposób na sprawdzenie, czy istnieją dowiązania symboliczne wskazujące na katalog?

Mam na serwerze folder, do którego miałem kilka dowiązań symbolicznych wskazujących. Od tego czasu utworzyłem nowy folder i chcę zmienić wszystkie te dowiązania symboliczne, aby wskazywały na nowy folder. Rozważałem zastąpienie oryginalnego folderu dowiązaniem symbolicznym do nowego folderu, ale wydaje się, że gdybym kontynuował tę praktykę, bardzo szybko mogłoby się to stać bardzo niechlujne.

To, co robiłem, to Ręczna zmiana dowiązań symbolicznych, aby wskazywały na nowy folder, ale mogłem pominąć kilka.

Czy jest sposób, aby sprawdzić, czy są jakieś dowiązania symboliczne wskazujące na konkretny folder?

Author: the Tin Man, 2008-09-19

8 answers

Użyłbym komendy find.

find . -lname /particular/folder

, który rekurencyjnie przeszukuje bieżący katalog pod kątem dowiązań symbolicznych do /particular/folder. Zauważ, że znajdzie tylko bezwzględne dowiązania symboliczne. Podobne polecenie może być użyte do wyszukiwania wszystkich dowiązań symbolicznych wskazujących na obiekty o nazwie "folder":

find . -lname '*folder'
Stamtąd będziesz musiał pozbyć się fałszywych alarmów.
 68
Author: skymt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 07:15:09

Możesz skontrolować dowiązania symboliczne za pomocą symlinks programu napisanego przez Marka Lorda -- przeskanuje cały system plików, znormalizuje ścieżki dowiązań symbolicznych do postaci absolutnej i wyświetli je na standardowe wyjście.

 6
Author: JJK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-05 16:25:32

Nie ma bezpośredniego sposobu, aby sprawdzić takie dowiązania symboliczne. Rozważ, że możesz mieć system plików, który nie jest montowany przez cały czas (np. zewnętrzny dysk USB), który może zawierać dowiązania symboliczne do innego woluminu w systemie.

Mógłbyś coś zrobić z:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Zauważam, że FreeBSD find nie obsługuje opcji -lname, dlatego skończyłem z powyższym.

 5
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 07:19:03
find . -type l -printf '%p -> %l\n'
 3
Author: no1uknow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 13:07:49

Poza przeglądaniem wszystkich innych folderów, jeśli są linki wskazujące na oryginalny folder, nie wydaje mi się to możliwe. Jeśli tak, to byłbym zainteresowany.

 2
Author: stephanea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 00:59:07
find / -lname 'fullyqualifiedpathoffile'
 1
Author: bfabry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-08 16:45:24
find /foldername -type l -exec ls -lad {} \;
 1
Author: Lunar Mushrooms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 13:07:54

Dla hardlinków, możesz uzyskać i-węzeł swojego katalogu za pomocą jednej z opcji "ls" (-i, tak myślę).

Następnie find z -inum zlokalizuje wszystkie popularne hardlinki.

Dla softlinków, być może będziesz musiał wykonać ls -l na wszystkich plikach szukających tekstu PO "- > " i normalizujących go, aby upewnić się, że jest to ścieżka bezwzględna.

 1
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 00:59:52