লিনাক্স শেলের দুটি পরম পাথ থেকে আপেক্ষিক পথটি কীভাবে গণনা করা যায়?


17

আমাদের দুটি পথ আছে। প্রথমটি হ'ল ডিরেক্টরি, দ্বিতীয় হয় ডিরেক্টরি বা ফাইল।

/a/b/c এবং /a/d/e.txt

প্রথম পথ থেকে দ্বিতীয় পথে আপেক্ষিক পথটি হ'ল:

../../d/e.txt

লিনাক্স টার্মিনালে এটি গণনা করব কীভাবে? যারা "ব্যবহারের ক্ষেত্রে কী?" জিজ্ঞাসা করেন তাদের পক্ষে প্রচুর আপেক্ষিক চিহ্ন তৈরি করতে one উদাহরণস্বরূপ use


1
এটি স্থানান্তরিত করা উচিত ছিল না।

উত্তর:


10

জিএনইউ কোর্টিলগুলি ধরে নিচ্ছি:

  • Symlinks জন্য, lnসম্প্রতি শিখেছি--relative বিকল্পটি ।

  • অন্য কিছুর জন্য, realpathবিকল্পগুলি সমর্থন করে --relative-to=এবং --relative-base=


1
ব্যাসিবক্স দিয়ে কীভাবে করবেন?
ডিউজুন

4

আমার জন্য, এই উত্তরটি (যা পাইথন অনেলাইনার ব্যবহার করে) নিখুঁতভাবে কাজ করে।

$ python -c "import os.path; print os.path.relpath('/a/d/e.txt', '/a/b/c')"
../../d/e.txt

ম্যাক ওএসএক্সে লিনাক্স (কুবুন্টু 14.04) এ সফলভাবে পরীক্ষিত, পাইথন 2.6 প্রয়োজন needs


2

realpathধারাবাহিকভাবে উপলব্ধ না হয় এবং নির্ভরতা হ্রাস না করে তার উপর নির্ভর না করার জন্য , আমি এটি নিয়ে এসেছি ( এই উত্তর থেকে কিছুটা সাহায্য নিয়ে ):

function relative_path_from_to() {
  # strip trailing slashes
  path1=${1%\/}
  path2=${2%\/}
  # common part of both paths
  common=$(printf '%s\x0%s' "${path1}" "${path2}" | sed 's/\(.*\).*\x0\1.*/\1/')
  # how many directories we have to go up to the common part
  up=$(grep -o "/" <<< ${path1#$common} | wc -l)
  # create a prefix in the form of ../../ ...
  prefix=""; for ((i=0; i<=$up; i++)); do prefix="$prefix../"; done
  # return prefix plus second path without common
  printf "$prefix${2#$common}"
}

উভয় প্যাথের সাধারণ অংশ সন্ধানের জন্য একটি সাবশেল তৈরি করে। হতে পারে আপনি এটি পছন্দ করেন - আমার জন্য কাজ করে।

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