উত্তর:
এটা তোলে শোনাচ্ছে মত basename চান এর dirname:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
কমান্ডটি এটি বর্তমান ডিরেক্টরিতে (ওরফে "।") ধরে নেবে।
parentname="$(basename "$(dirname "$pwd")")"
PWD
এটিকে অবশ্যই মূলধন করতে হবে। ব্যবহার করে দেখুন parentname="$(basename "$(dirname "$PWD")")"
।
আপনি বর্তমান ওয়ার্কিং ডিরেক্টরিটি পেতে পিডাব্লুডিকে ব্যবহার করতে পারেন এবং এটি অন্য (উপ) শেলটিতে ফোরকিং এড়ানোর জন্য প্যারামিটার সম্প্রসারণ ব্যবহার করতে পারেন ।
echo ${PWD##*/}
সম্পাদনা: প্রমাণিত উত্স
${path##*/}
আমি মনে করি এটি একটি কম-সংস্থান সমাধান:
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
সম্পাদনা: দুঃখিত, বাশে নেস্টেড সম্প্রসারণ সম্ভব নয় তবে এটি zsh এ কাজ করে। ব্যাশ-সংস্করণ:
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
filepath=file
বা ফাইলপথ = / ফাইল` দিয়ে এটি ব্যবহার করে দেখুন `
foofile
? যদি এটি পুরো পাথ না হয় তা জানতে না পারে (যদি foofile
বিদ্যমান ফাইলটি কেবল একটি "স্ট্রিং" নাও হয়)।
ব্যাশে, এক লাইনে:
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
আমি জুলিয়ান 67 এর উত্তরটি সর্বোপরি পছন্দ করি তবে এখানে কিছুটা প্রসারিত সংস্করণ রয়েছে:
file_path = "a/b/c/d/file.txt"
parent=$(echo $file_path | sed -e 's;\/[^/]*$;;') # cut away "/file.txt";'$' is end of string
parent=$(echo $parent | sed -e 's;.*\/;;') # cut away "/a/b/c/"
echo $parent # --> you get "d"