বাশ গ্লোবস্টারের মিল


18

আমার এই ডিরেক্টরি কাঠামো আছে:

~/tmp/globstar ɀ  find dir -type f
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext

এবং, globstarবাশে সক্ষম বিকল্পের সাহায্যে, আমি বলতে পারি:

~/tmp/globstar ɀ  ls -1 dir/**/*.ext
dir/subdir1/file.ext
dir/subdir2/file.ext

আমার প্রশ্ন: কেন dir/file.extএই তালিকা থেকে বাদ দেওয়া হয়েছে?

বাশ ম্যানুয়াল এই সম্পর্কে বলে globstar:

যদি সেট করা থাকে, কোনও ফাইল নাম প্রসারণ প্রসঙ্গে ব্যবহৃত প্যাটার্ন '**' সমস্ত ফাইল এবং শূন্য বা আরও বেশি ডিরেক্টরি এবং সাব ডিরেক্টরিতে মেলে। যদি প্যাটার্নটি '/' দ্বারা অনুসরণ করা হয় তবে কেবল ডিরেক্টরি এবং উপ-ডিরেক্টরি মেলে।

এই অনুচ্ছেদে " শূন্য " আমাকে এমন ছাপ দিয়ে দিন যা dir/file.extঅন্তর্ভুক্ত করা উচিত ছিল; যদি না আমি আশা করি কিছু মিস করছি


2
এই চরিত্রটি কী? ɀ?
— slm

2
কোন সংস্করণ বাশ, কোন প্ল্যাটফর্মে? আমি এটি ডেবিয়ান হুইজিতে বাশ 4.2.37 বা ড্যাবিয়ান স্কিজে 4.1.5 বাশ দিয়ে পুনরুত্পাদন করতে পারি না। @ এসএলএম unicode ɀবা উইকিপিডিয়া
— গিলস

1
@ জিলস কি প্রম্পট?
— slm

5
এসএমএল, হ্যাঁ! ɀপ্রম্পট পার্থক্য করতে এখানে ব্যবহৃত একটি চরিত্র মাত্র। কিছু ব্যবহারকারী চরিত্রটি পছন্দ করেন £বা €তার পরিবর্তে $:)। মূলত, ɀএকটি 'জেড' চরিত্রটি একটি বিশেষ আফ্রিকান ভাষার স্বরলিপি :-)
— স্লিক্স

1
"জিএনইউ বাশ, সংস্করণ 3.2.53 (1) -রিলেজ (x86_64-আপেল-ডারউইন 13)" ওএস এক্স 10.9 এর সাথে প্রেরণ করা এই আচরণ করে।
— নাতিভ

উত্তর:


8

আমি অনুমান করি যে কেবলমাত্র উপ-ডিরেক্টরি স্তরকে বোঝায়। ম্যাচ **ছাড়া/

  1. সমস্ত ফাইল এবং ডিরেক্টরি

  2. শূন্য বা আরও উপ-ডিরেক্টরি

তবে এটি পুরোপুরি অদৃশ্য হয় না। **/এর মানে হল যে উচ্চ-স্তরের ডিরেক্টরিতে **প্রয়োগ করা ফাইলগুলির কোনও ফাইলই মিলছে না।

আপনি প্রয়োজন dir/*.ext dir/**/*.ext।


হ্যাঁ, এটি আমার ফ্যালব্যাক, এটি ঠিক সুন্দর দেখাচ্ছে না। ;-)
— ভ্লাদ গুরুদিগা

10

তালিকাভুক্ত বিতরণগুলির সাথে সরবরাহিত বাশের এই সংস্করণগুলিতে আপনি প্রত্যাশা মতো এটি কাজ করে:

  • 4.1.2 (1) - CentOS 6.5
  • 4.1.5 (1) - ডেবিয়ান 6.0.10
  • 4.1.10 (4) - সাইগউইন 1.7.31
  • 4.2.46 (1) - সেন্টস 7.1
  • 4.3.11 (1) - উবুন্টু 14.04.1
  • 4.3.30 (1) - ডেবিয়ান 8.1

আসলে উপরে তালিকাভুক্ত সংস্করণগুলি যা আমি পরীক্ষা করেছি are অন্য কথায় আমি বাশের 4 সংস্করণ পাইনি যেখানে এটি কাজ করে না। বিকল্পগুলি globstarবাশ ৪.০ এ যুক্ত করা হয়েছে পরিবর্তনগুলি দেখুন । পুরানো সংস্করণগুলিতে কমান্ডটি shopt -s globstarএকটি ত্রুটি ফিরিয়ে আনবে।

টেস্ট

1. dir/**/*.ext ম্যাচ dir/file.ext:

~/tests$ ls -1 dir/**/*.ext
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext

২. **/*.ext ম্যাচ file.ext:

~/tests$ cd dir
~/tests/dir$ ls -1 **/*.ext
file.ext
subdir1/file.ext
subdir2/file.ext

উপরোক্ত পরীক্ষাগুলি পুনরুত্পাদন করার জন্য পরিবেশ প্রস্তুত করা :

mkdir -p dir/subdir{1,2}
touch dir/{,subdir{1,2}/}file.ext
shopt -s globstar

2
এই সঠিক উত্তর। ওপি সেট করতে ভুলে গেছে shopt -s globstar।
— সিএস পেই

5

আপনি আমার / গ্লোব স্টার বন্ধ করে দেওয়ার মতো দেখায়। এটি এভাবে চালু করা যেতে পারে:

shopt -s globstar

এটি কেবল শূন্য উপ-ডিরেক্টরিগুলির সাথে মেলে না, তবে এটি দুটি সাব-ডিরেক্টরিকেও মেলে না:

$ find dir -type f #the same as yours except with a directory inside one of the subdirectories
dir/file.ext
dir/subdir1/file.ext
dir/subdir1/subsubdir/file.ext
dir/subdir2/file.ext
$ shopt -u globstar #turn globstar off
$ #will only show files in subdirectories
$ #will not show files in dir or in subsubdir
$ echo dir/**/*.ext
dir/subdir1/file.ext dir/subdir2/file.ext
$ shopt -s globstar #turn globstar on
$ #will show all four files
$ echo dir/**/*.ext
dir/file.ext dir/subdir1/file.ext dir/subdir1/subsubdir/file.ext dir/subdir2/file.ext

গ্লোবস্টার বন্ধ হয়ে গেলে, ** ঠিক * এর মতো আচরণ শুরু করে, তাই dir/**/*.extএকই ফলাফল পায়dir/*/*.ext

$ echo dir/*/*.ext
dir/subdir1/file.ext dir/subdir2/file.ext

যা আমাকে মাঝে মাঝে গ্লোব স্টার ভাবার পথে চালিত করে

আপনার বর্তমান গ্লোবস্টারের সেটিংটি এটির মতো পরীক্ষা করুন:

shopt | grep globstar

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