আমার স্ক্রিপ্টে আমার যে ফাইলটি নিয়ে কাজ করছি তার ডিরেক্টরি প্রয়োজন । উদাহরণস্বরূপ, ফাইল = "স্টাফ / ব্যাকআপ / ফাইল.জিপ" । ভেরিয়েবল থেকে স্ট্রিং " স্টাফ / ব্যাকআপ / " পাওয়ার জন্য আমার একটি উপায় দরকার $file।
আমার স্ক্রিপ্টে আমার যে ফাইলটি নিয়ে কাজ করছি তার ডিরেক্টরি প্রয়োজন । উদাহরণস্বরূপ, ফাইল = "স্টাফ / ব্যাকআপ / ফাইল.জিপ" । ভেরিয়েবল থেকে স্ট্রিং " স্টাফ / ব্যাকআপ / " পাওয়ার জন্য আমার একটি উপায় দরকার $file।
উত্তর:
dirname $file
আপনি যা খুঁজছেন তা
dirname "$file"বরং। উদ্ধৃতি ব্যতীত ফাইল বা ডিরেক্টরিটির নামের ফাঁকা থাকলে এটি দুর্ব্যবহার করবে।
dirname $file
আউটপুট হবে
stuff/backup
যা এর বিপরীত basename:
basename $file
আউটপুট হবে
file.zip
${file%/*}আপনি বাহ্যিক কমান্ডের উপর নির্ভর করবেন না বলে উরভিন / লুফফাইয়ের প্রস্তাবিত মত ব্যবহার প্রযুক্তিগত দিক থেকে আরও ভাল। বেসনামটি একইভাবে পেতে আপনি করতে পারেন ${file##*/}। আপনার প্রয়োজন না হলে বাহ্যিক কমান্ড ব্যবহার করা অপ্রয়োজনীয়।
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
এটি পুরোপুরি এইভাবে পসিক্স মেনে চলবে। আশা করি এটা সাহায্য করবে! :-)
dirname(আরও দক্ষ) উপর একটি সুবিধা রয়েছে বিল্ট-ইন পদ্ধতির, এবং যে যদি আপনি নির্দিষ্ট হয় না আপনার পাথ সম্পূর্ণরূপে যোগ্যতাসম্পন্ন দিয়ে শুরু হয়। আপনি যদি file=file.zip, dirname "$file"ফিরে আসবে ., যেহেতু ${file%/*}ফিরে আসবে file.zip।
case $file in */*) dir=${file%/*};; *) dir=.;; esacএখনও POSIX-y এবং সমস্যাটি সম্বোধন করে।
সহজভাবে ব্যবহার $ dirname /home/~username/stuff/backup/file.zip
এটি ফিরে আসবে /home/~username/stuff/backup/
dirname $file