আমি দৃ strongly়ভাবে এই কাজের জন্য ব্যবহার না করার পরামর্শ দেব 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
) - তবে এর আরও গুরুতর পরিণতি হতে পারে। উদাহরণস্বরূপ, ক্রুট পরিবেশ বিবেচনা করুন: এগুলি মূল ফাইল সিস্টেমের কিছু উপ-ডিরেক্টরিতে থাকতে পারে এবং পরম অবস্থানগুলিতে প্রতিলিঙ্ক ধারণ করে। এই লিঙ্কগুলি "বাহ্যিক" সিস্টেমের জন্য ভাঙ্গা বলে মনে হতে পারে, কারণ আপনি ক্রুটটিতে প্রবেশ করার পরে তারা কেবল উপযুক্ত জায়গাগুলির দিকেই নির্দেশ করে। আমি আরও স্মরণ করি যে কিছু বুটলোডার /boot
কেবল প্রাথমিক বুট পর্যায়ে সিমলিঙ্ক ব্যবহার করেছিল, যখন বুট পার্টিশনটি মাউন্ট করা হয়েছিল /
।
সুতরাং আপনি যদি find -L
কোনও নির্দোষ-দৃষ্টিকোণ ডিরেক্টরি থেকে ভাঙা চিহ্নগুলি সন্ধান করতে এবং মুছে ফেলার জন্য কোনও আদেশ ব্যবহার করেন তবে আপনি এমনকি আপনার সিস্টেমটিও ভেঙে দিতে পারেন ...
-type l
যেহেতু নন-লিঙ্কগুলি-xtype l
চালিত হবে তাই অপ্রয়োজনীয়-type l
। তাইfind -xtype l
সম্ভবত আপনার প্রয়োজন হয়। এই পদ্ধতির জন্য ধন্যবাদ।