দুটি পাথ একই ফাইলের দিকে নির্দেশ করছে কিনা তা পরীক্ষা করুন


12

ফাইলগুলিকে সংস্করণ নিয়ন্ত্রণে রাখতে আমার হোম ডিরেক্টরিতে পুনরায় ক্রিয়াকলাপগুলি আমার সেটিংস ডিরেক্টরিতে সিমলিংক তৈরি করার জন্য একটি স্ক্রিপ্ট পেয়েছি। আমি এটির জন্য পূর্ববর্তী ডিরেক্টরিতে ইতিমধ্যে সিমলিংকযুক্ত ফাইলগুলি এড়িয়ে যেতে চাই। এটি হ'ল, যদি আমার কাছে এই ফাইলগুলি / ডিরেক্টরিগুলি থাকে:

~/foo/ -> ~/settings/foo/
~/settings/foo/
~/settings/foo/bar

, আমি কীভাবে চেক করব যে file / foo / বার এবং ~ / সেটিংস / foo / বার একই ফাইল?

সম্পাদনা : দোহ, অনুসন্ধানের আরও কয়েক মিনিটের উত্তরটি প্রকাশ করেছে :readlink -f $path

উত্তর:


6

দুটি ফাইলের যদি একই ডিভাইসআইডি এবং ইনোড থাকে তবে তারা একই ফাইল। statকমান্ড লাইন টুল এই এটি সহজ করে তোলে

if [ "$(stat -c "%d:%i" FILE1)" == "$(stat -c "%d:%i" FILE2)" ]`

...

এটি সিমলিঙ্কযুক্ত ফাইল বা হার্ডলিঙ্কযুক্ত ফাইলগুলির জন্য কাজ করে।


5
প্রতীকী লিঙ্কগুলি অনুসরণ করতে আপনার প্রয়োজন stat -L
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলিসের মত বলেছিলেন, এল-এল সুইচ ব্যতীত আপনি কিছু বিতরণে ভুল ফলাফল পেতে পারেন
ওলাসেনি

19

অনেকগুলি শেলের বিল্টিনের (বা এর সমার্থক শব্দ ) -efঅপারেটর রয়েছে যা পরীক্ষার জন্য দুটি পাথ একই বিদ্যমান ফাইলটিতে নির্দেশ করে (নিম্নলিখিত প্রতীকী লিঙ্কগুলি)। এর মধ্যে রয়েছে ব্যাশ, ড্যাশ, পিডিএক্স, ksh88, ksh93 এবং zsh, তবে পসিক্স শ নয়। ব্যাশ, ksh বা zsh, আপনি এছাড়াও ব্যবহার করতে পারেন মধ্যে শর্তসাপেক্ষ কনস্ট্রাক্ট।test[-ef[[ … ]]

if ! [ "$1" -ef "$2" ]; then # $1 and $2 are different files

1
আমার ম্যানপেজ অনুসারে, -রিফ সমৃদ্ধ হোমোলকার উত্তর হিসাবে ঠিক একই কাজ করে।
ব্যবহারকারী 13852

2
@ ব্যবহারকারী 13852 -efএর বেশি পোর্টেবল হওয়ার সুবিধা রয়েছে (কিছুটা দ্রুতও তবে এটি বেশিরভাগ সময় লক্ষ্য করবেন)। উদাহরণস্বরূপ এটি * বিএসডি, ওএসএক্স, ব্যজিবক্স পাশাপাশি লিনাক্স / সাইগউইন (জিএনইউ) এ কাজ করে। এটি আরও পরিষ্কার, কারণ এটি যা প্রয়োজন ঠিক তা করে। statআপনি যখন সিমলিংকগুলি অনুসরণ করতে চান না তখন কেবল কল করতে আমি দেখতে পাই advantage
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.