বাশে, যদি VAR="/home/me/mydir/file.c"
, আমি কীভাবে পাব "/home/me/mydir"
?
বাশে, যদি VAR="/home/me/mydir/file.c"
, আমি কীভাবে পাব "/home/me/mydir"
?
উত্তর:
dirname
এবং basename
যে সরঞ্জামগুলি আপনি পাথের উপাদানগুলি আহরণের জন্য সন্ধান করছেন তা হ'ল:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
এগুলি অভ্যন্তরীণ বাশ কমান্ড নয় তবে তারা পসিক্স স্ট্যান্ডার্ডের একটি অংশ (দেখুন dirname
, basename
) এবং তাই বাশ চলমান প্রচুর সিস্টেমে পাওয়া উচিত।
$ export VAR=/home/me/mydir/file.c
$ export DIR=${VAR%/*}
$ echo "${DIR}"
/home/me/mydir
$ echo "${VAR##*/}"
file.c
basename
এবং এর সাথে নির্ভরতা এড়াতেdirname
সম্পর্কিত নোটে, যদি আপনার কাছে কেবল ফাইলের নাম বা আপেক্ষিক পাথ dirname
থাকে তবে এটি নিজেই সহায়তা করবে না। আমার জন্য, উত্তরটি শেষ হয়ে গেল readlink
।
fname='txtfile'
echo $(dirname "$fname") # output: .
echo $(readlink -f "$fname") # output: /home/me/work/txtfile
এরপরে আপনি কেবল দুটি ডিরেক্টরি একত্রিত করতে পারেন কেবল ডিরেক্টরি পেতে।
echo $(dirname $(readlink -f "$fname")) # output: /home/me/work
readlink -m "$fname"
দেওয়া নামটি পুনরাবৃত্তভাবে ক্যানোনিকালাইজ করতে ব্যবহার করা উচিত
যদি আপনি লক্ষ্যযুক্ত ফাইলগুলিকে প্রতীকী লিঙ্ক হিসাবে যত্নশীল করেন তবে প্রথমে আপনি এটি পরীক্ষা করে মূল ফাইলটি পেতে পারেন। নীচের আইফোনটি আপনাকে সহায়তা করতে পারে।
if [ -h $file ]
then
base=$(dirname $(readlink $file))
else
base=$(dirname $file)
fi
আমি এটি নিয়ে খেলছিলাম এবং একটি বিকল্প নিয়ে এসেছি।
$ VAR=/home/me/mydir/file.c
$ DIR=`echo $VAR |xargs dirname`
$ echo $DIR
/home/me/mydir
আমি যে অংশটি পছন্দ করেছি তা হ'ল গাছটিকে ব্যাকআপ করা সহজ ছিল:
$ DIR=`echo $VAR |xargs dirname |xargs dirname |xargs dirname`
$ echo $DIR
/home