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


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.