পথ থেকে ডিরেক্টরি নিষ্কাশন


123

আমার স্ক্রিপ্টে আমার যে ফাইলটি নিয়ে কাজ করছি তার ডিরেক্টরি প্রয়োজন । উদাহরণস্বরূপ, ফাইল = "স্টাফ / ব্যাকআপ / ফাইল.জিপ" । ভেরিয়েবল থেকে স্ট্রিং " স্টাফ / ব্যাকআপ / " পাওয়ার জন্য আমার একটি উপায় দরকার $file

উত্তর:


203
dirname $file

আপনি যা খুঁজছেন তা


+1, আমাকে এটি মারধর। দ্রুততর হতো কিন্তু চেয়ে বেশি প্রবেশ করতে prompoted ছিলdirname $file
matchew

1
dirname "$file"বরং। উদ্ধৃতি ব্যতীত ফাইল বা ডিরেক্টরিটির নামের ফাঁকা থাকলে এটি দুর্ব্যবহার করবে।
চার্লস ডাফি 21'18

এফএমএল, প্রশ্নটি ফাইল থেকে নিখুঁত দির বের করা উচিত, আমি কীভাবে এটি করব? ডেরনামটি অনুমান করে তুলনামূলকভাবে পথ দেয়
আলেকজান্ডার মিলস

উইন ব্যাচের স্ক্রিপ্টে এটি অর্জন করা কতটা কঠিন তা অসামান্য! এগুলি ব্যবহার না করার আরেকটি কারণ আমার ধারণা!
বুঙ্কারডিভ

47
dirname $file

আউটপুট হবে

stuff/backup

যা এর বিপরীত basename:

basename $file

আউটপুট হবে

file.zip

আমি মূর্ত ম্যাট সেখানে (মানুষ dirname) থেকে এটা চিন্তা করতে সক্ষম হবে :)
Matthieu

1
আমি মনে করি আমরা সকলেই এখানে রয়েছি Matt শুধু অনুমান। তবে আমি আমার উত্তরটি আপনার থেকে আলাদা করার চেষ্টা করছিলাম। =)
ম্যাচচিউ

হ্যাঁ, আমি বেসনেমটিও অনেক ব্যবহার করি, এটি খুব নিফটি =) তবে আমি গুগলে ফাইলটির ডির ফিরিয়ে দেওয়ার বিষয়ে কিছুই খুঁজে পাইনি! আমার ধারণা আমি সঠিক শব্দটি দেখছিলাম না। হাহ, আমাদের তিনজনই ম্যাট এর? : ডি
ম্যাট

1
এই কমান্ডগুলি ফাঁকা স্থানগুলি (গ্লোব অক্ষর ইত্যাদি) এর সাথে কাজ করে তা নিশ্চিত করার জন্য প্রয়োজনীয় উদ্ধৃতি যুক্ত করার বিষয়টি বিবেচনা করুন।
চার্লস ডাফি 21'18

3

${file%/*}আপনি বাহ্যিক কমান্ডের উপর নির্ভর করবেন না বলে উরভিন / লুফফাইয়ের প্রস্তাবিত মত ব্যবহার প্রযুক্তিগত দিক থেকে আরও ভাল। বেসনামটি একইভাবে পেতে আপনি করতে পারেন ${file##*/}। আপনার প্রয়োজন না হলে বাহ্যিক কমান্ড ব্যবহার করা অপ্রয়োজনীয়।

file="/stuff/backup/file.zip"
filename=${1##*/}     # file.zip
directory=${1%/*}     # /stuff/backup

এটি পুরোপুরি এইভাবে পসিক্স মেনে চলবে। আশা করি এটা সাহায্য করবে! :-)


1
নেই এক ক্ষেত্রে যেখানে dirname(আরও দক্ষ) উপর একটি সুবিধা রয়েছে বিল্ট-ইন পদ্ধতির, এবং যে যদি আপনি নির্দিষ্ট হয় না আপনার পাথ সম্পূর্ণরূপে যোগ্যতাসম্পন্ন দিয়ে শুরু হয়। আপনি যদি file=file.zip, dirname "$file"ফিরে আসবে ., যেহেতু ${file%/*}ফিরে আসবে file.zip
চার্লস ডাফি

1
... অবশ্যই, আপনি শাখা করতে পারেন: case $file in */*) dir=${file%/*};; *) dir=.;; esacএখনও POSIX-y এবং সমস্যাটি সম্বোধন করে।
চার্লস ডাফি


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