সিমলিঙ্কযুক্ত পথে কাজ করে না?


15

যদি আমি এই কমান্ডটি চালিত করি তবে find $HOME/MySymlinkedPath -name "run*.sh"কিছুই ঘটে না এবং ত্রুটি না দেয় ('মাইসিম্লিংকডপথ' অন্য একটি হার্ড ড্রাইভের জন্য আমার $ হোম একের একটি সিমলিঙ্কযুক্ত পথ)।

এগুলিও ব্যর্থ হয়:

find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"

এবং কেবল এটি নিশ্চিত করার জন্য, এই অস্তিত্বহীন পাথটি ব্যর্থ হয় (অবশ্যই) find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"তাই সেই পথটি সন্ধান করা হচ্ছে (কারণ ত্রুটিটি ঘটে না) তবে findএটি অনুসন্ধান করে না, এবং আমি এখন অনেক অজ্ঞান।

এটি কেবল তখনই কাজ করে যদি আমি cd $HOME/MySymlinkedPathপ্রথমে পথের রেফারেন্সটি সরিয়ে ফেলি find -name "run*.sh"তবে এটি আমার স্ক্রিপ্টগুলির পক্ষে ভাল নয়।

একটি অতিরিক্ত তথ্য :
এই কমান্ডটি যথারীতি কাজ করে ls $HOME/MySymlinkedPath/run*.sh, এবং যদি আমি সেখানে গিয়ে cd $HOME/MySymlinkedPathএই চালনা করি ls ..তবে ফলাফলটি আমার প্রত্যাশা ছিল না - সিমলিংকযুক্ত পথটি যে পাথটির রয়েছে তার তালিকা - এটি আসল পথে তালিকার তালিকা দেয় অন্য মিডিয়া / হার্ডড্রাইভ !!!

pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath

পুনরায় চিন্তাভাবনা : এটি
কি findএবং lsআমার সিস্টেমে সমস্যা? বা এটি প্রত্যাশিত এবং কোনও সমস্যা নয় ?? আমি উবুন্টু 12.10 এ আছি। আমি পরীক্ষিত সমস্ত টার্মিনালগুলিতে এটি ব্যর্থ হয় তাই টার্মিনালটি "সমস্যা" বলে মনে হয় না।


1
আমি একটি আরও ভাল উত্তর পেয়েছি "ফাইন্ড ফলো"। stackoverflow.com/questions/105212/…
জারোড

@ জারোড ম্যান পেজটি বলেছে - ফলো অবচয় করা হয়েছে এবং নীচের আমার উত্তর অনুসারে আমাদের -L (এটিও - ফলো) ব্যবহার করা উচিত:>
কুম্ভ শক্তি

উত্তর:


20

উত্তর এখানে । কিন্তু এই প্রশ্নটি সমস্যার লক্ষ্য হিসাবে বাশকে নির্দেশ করে।

ব্যাখ্যাটি এটি findখুঁজে পায় "$HOME/MySymlinkedPath"। এটি একটি প্রতীকী লিঙ্ক, ডিরেক্টরি নয়, তাই পুনরাবৃত্তির উত্স সেখানেই থামবে। যদি অভিব্যক্তিটি মিলে যায় "$HOME/MySymlinkedPath"(উদাহরণস্বরূপ, ইন find "$HOME/MySymlinkedPath" -name 'My*'), তবে findএটি ম্যাচ হিসাবে মুদ্রণ করবে।

সেখানে উল্লিখিত হিসাবে, আমি দেখতে পেয়েছি যে এর সাথে ডিল করার এবং সমস্ত স্ক্রিপ্টগুলি ঠিক করার সবচেয়ে সহজ / পরিষ্কার উপায় হ'ল পরিবর্তে:

find "$HOME/MySymlinkedPath" -name "run*.sh"

কেবল একটি স্ল্যাশ যুক্ত করুন, findএটি প্রতীকী লিঙ্ক থেকে নয়, প্রতীকী লিঙ্কের লক্ষ্য থেকে শুরু করুন:

find "$HOME/MySymlinkedPath/" -name "run*.sh"

বিকল্পভাবে, কমান্ড লাইনে পাস হওয়া প্রতীকী লিঙ্কগুলি অতিক্রম করতে বলার -Hজন্য find(লক্ষ্য করুন যে এটি অবশ্যই আগে আসতে হবে) পাস করুন। (এটি আলাদা -Lযা থেকে findপুনরাবৃত্ত উত্থানের সময় সম্মুখীন হওয়া প্রতীকী লিঙ্কগুলিও বোঝায় ))

find -H "$HOME/MySymlinkedPath" -name "run*.sh"

এবং অবশেষে এটি এখানে সবচেয়ে ভাল কাজ করেছে -L(কারণ আমি ফোল্ডারগুলির মাধ্যমে বেশ কয়েকটি ফাইল সিস্টেমের সাথে সিমলিংক করেছি)। তবে এটি সমস্যাযুক্ত ত্রুটি বার্তাগুলির প্রচুর পরিমাণে উত্পন্ন করে তাই আমি যুক্ত করেছি 2>/dev/null; এবং এই উপনামটি তৈরি করার সিদ্ধান্ত নিয়েছে alias find='find -L':

find -L "$HOME/MySymlinkedPath" -name "run*.sh" 2>/dev/null

2
আইএমএইচও, ডিরেক্টরিগুলি পরে যে তারা প্রকৃত ডিরেক্টরি হয় তা নির্দেশ করার জন্য পিছনে স্ল্যাশ ব্যবহার করা সাধারণত ভাল অনুশীলন। :) জিনিষ আরো পাঠযোগ্য, ইত্যাদি
dannysauer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.