කාර්යය සඳහා භාවිතා නොකරන ලෙස මම තරයේ යෝජනා කරමි find -L
(පැහැදිලි කිරීම සඳහා පහත බලන්න). මෙය කිරීමට තවත් ක්රම කිහිපයක් මෙන්න:
ඔබට "පිරිසිදු find
" ක්රමයක් භාවිතා කිරීමට අවශ්ය නම් , එය මේ ආකාරයට විය යුතුය:
find . -xtype l
( xtype
විකෘති කරන ලද සබැඳියක සිදු කරන ලද පරීක්ෂණයකි) මෙය සෑම අනුවාදයකම නොතිබිය හැකිය find
. නමුත් වෙනත් විකල්පද ඇත:
ඔබට විධානය test -e
තුළ සිට find
ක්රියාත්මක කළ හැකිය:
find . -type l ! -exec test -e {} \; -print
සමහර grep
උපක්රම පවා වඩා හොඳ (එනම්, ආරක්ෂිත ) විය හැකිය find -L
, නමුත් හරියටම ප්රශ්නයේ ඉදිරිපත් කර ඇති ආකාරයට නොවේ (ගොනු නාම ඇතුළුව සමස්ත ප්රතිදාන රේඛාවලින් එය ග්රහණය වේ):
find . -type l -exec sh -c 'file -b "$1" | grep -q ^broken' sh {} \; -print
මෙම find -L
උපුටා උපක්රමය ඒකල විසින් සිට commandlinefu ලස්සන සහ hacky බලයි, නමුත් එය එක් ඇත්තේ ඉතා භයානක මුහුණ දීමට සිදුවන අන්තරායක් : සියලු symlinks අනුගමනය කර ඇත. පහත දක්වා ඇති අන්තර්ගතයන් සමඟ නාමාවලිය සලකා බලන්න:
$ ls -l
total 0
lrwxrwxrwx 1 michal users 6 May 15 08:12 link_1 -> nonexistent1
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_2 -> nonexistent2
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_3 -> nonexistent3
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_4 -> nonexistent4
lrwxrwxrwx 1 michal users 11 May 15 08:20 link_out -> /usr/share/
ඔබ find -L . -type l
එම ඩිරෙක්ටරියේ ධාවනය කරන්නේ නම් , සියල්ලම /usr/share/
සොයනු ඇත (ඒ සඳහා බොහෝ කාලයක් ගතවනු ඇත) 1 . “පිටතට යන සබැඳිවලින් ප්රතිශක්තීකරණ” විධානයක් සඳහා find
, භාවිතා නොකරන්න-L
.
[1] මෙය සුළු අපහසුතාවයක් සේ පෙනේ (විධානය සියල්ල ගමන් කිරීමට බොහෝ කාලයක් ගතවනු ඇත /usr/share
) - නමුත් වඩා දරුණු ප්රතිවිපාක ඇති කළ හැකිය. නිදසුනක් ලෙස, chroot පරිසරයන් සලකා බලන්න: ඒවා ප්රධාන ගොනු පද්ධතියේ සමහර උප බහලුමක පැවතිය හැකි අතර නිරපේක්ෂ ස්ථානවලට සමමුහුර්ත අඩංගු වේ. එම සම්බන්ධතා "පිටත" පද්ධතිය සඳහා කැඩී ඇති බවක් පෙනෙන්නට තිබේ, මන්ද ඒවා නිසි ස්ථාන වෙත යොමු වන්නේ ඔබ chroot වෙත ඇතුළු වූ පසු පමණි. සමහර ඇරඹුම් කාරකය ඒ යටතේ සිම්ලින්ක් භාවිතා කළ බව මට මතකයි /boot
, ආරම්භක ඇරඹුම් අවධියේදී, ඇරඹුම් කොටස සවිකරන විට පමණි /
.
එබැවින් find -L
හානිකර නොවන පෙනුමක් ඇති නාමාවලියකින් කැඩුණු සිම්ලින්ක් සොයා ගැනීමට සහ මකා දැමීමට ඔබ විධානයක් භාවිතා කරන්නේ නම් , ඔබට ඔබේ පද්ධතිය පවා බිඳ දැමිය හැකිය ...
-type l
අතිරික්තයක් ඇති බැවින් සබැඳි නොවන-xtype l
පරිදි ක්රියාත්මක වේ-type l
. ඒ නිසාfind -xtype l
බොහෝ විට සියලු ඔබට අවශ්ය වේ. මෙම ප්රවේශයට ස්තූතියි.