সিএমডি: *। * নাকি শুধু *?


47

১৯৯০ এর দশকে, আমি *.*এমএস-ডস-এর যে কোনও ফাইলের নাম উপস্থাপন করতে " " ব্যবহার করতাম , তবে আমি *এই দিনগুলিতে আরও " " স্ক্রিপ্টগুলি ব্যবহার করে দেখেছি । আমি যেটি ব্যবহার করি এটির কি আসলে কোনও তফাত আছে?


9
যদিও এটি সত্য *এবং *.*এখন cmdঅভ্যন্তরীণ কমান্ড এবং আধুনিক কমান্ড-লাইন ইউটিলিটিগুলির জন্য সমান , কিছু পুরানো ইউটিলিটিগুলি যেগুলি ফাইল মাস্ক পরামিতিগুলি গ্রহণ করে তারা পুরানো ফাইল মেলানো ফাংশন ব্যবহার করতে পারে এবং তাদের জন্য মুখোশগুলি সমতুল্য হবে না।
এএফএইচ

@ AFH আমি টোকেন সমান বলে মনে করি না। *.*টোকেন extensionless ফাইল আসতে করা উচিত নয়।
tuskiomi

1
@ টসকিওমি - আমি আপনার সাথে একমত হই যা এক্সটেনশনহীন ফাইলগুলি ফিরিয়ে *.* না দেয় । দুর্ভাগ্যক্রমে এটি হয়। গ্র্যাভিটির উত্তর দেখুন।
এএফএইচ

উত্তর:


65

উইন্ডোজ 95 এবং এনটি 3.5 "লং ফাইলের নাম" সমর্থন প্রবর্তন করার পর থেকেই ফাইলের নাম এবং এক্সটেনশান একক ক্ষেত্র হয়ে দাঁড়িয়েছে এবং ওয়াইল্ডকার্ড ম্যাচগুলি একবারে পুরো ফাইল নামের বিরুদ্ধে করা হয়। ফলস্বরূপ, এতে কোনও বিন্দুবিহীন একটি ফাইলের নাম থাকতে পারে (ফাইলগুলির জন্য সম্ভবত বিরল, তবে ফোল্ডার / ডিরেক্টরিগুলির জন্য খুব সাধারণ) এবং প্রথম নজরে এ *.*জাতীয় ফাইলগুলি মিলবে না।

পুরানো স্ক্রিপ্টগুলি এখনও সামঞ্জস্যতার কোডের কারণে কাজ *.* করবে - যদি ওয়াইল্ডকার্ডটি শেষ হয় .*, সেই অংশটি ওএস দ্বারা উপেক্ষা করা হবে। (সুতরাং আপনি যদি কোনও এক্সটেনশানের সাথে ফাইলগুলি বিশেষভাবে মেলাতে চান তবে আমার ধারণা এটির জন্য আপনার প্রয়োজন হবে *.?*))

তবে এটি এমন কিছু নয় যা আপনার উপর নির্ভর করা উচিত; যদি আপনি আধুনিক উইন্ডোজ সংস্করণের জন্য স্ক্রিপ্ট লেখার, তাদের নিয়মাবলী অনুসরণ না MS-DOS এর নিয়মাবলী। (নোট যে উইন্ডোজ এনটি থেকে, .bat স্ক্রিপ্ট হয় না MS-DOS এর দ্বারা আর কিন্তু ব্যাখ্যা cmd.exe, একটি নেটিভ Win32 প্রোগ্রাম।)


লিনাক্স এবং অন্যান্য বিভিন্ন Unixen, অন নাম ও এক্সটেনশন প্রথম স্থানে পৃথক হয়েছে না, এবং নয় করতে কোনো বিশেষ জাদু *.*কাজ, তাই *শুধুমাত্র পছন্দ যে অর্থে তোলে।


14
"আসুন এক্সটেনশন সহ ফাইলগুলি ফিল্টার করা আরও কঠিন করা যাক!" -অজ্ঞাত মাইক্রোসফ্ট বিকাশকারী
জন হ্যামিল্টন

50
"আসুন সবার জন্য লক্ষ লক্ষ বিদ্যমান ব্যাচের স্ক্রিপ্টগুলি ভেঙে দিন! হ্যাঁ!" মাইক্রোসফ্ট বিকাশকারী, কখনও নেই
গুরুতরত্ব

3
আইএসআরটি যে ডসের কিছু পুরানো সংস্করণে *কেবল কোনও এক্সটেনশন ছাড়াই ফাইলের সাথে মিলবে । উভয়ের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য 'নিরাপদ' উপায়টি ছিল ব্যবহার করা **
র্যান্ডম 832

8
ওপি উইন্ডোজ সম্পর্কে, তবে যেহেতু আপনি লিনাক্সের কথা উল্লেখ করেছেন: কিছু শেলের মধ্যে (উদাহরণস্বরূপ ব্যাশ ) লুকানো ফাইলের সাথে মেলে না *( ডিফল্টরূপে ) (ক দিয়ে শুরু করে .)।
ফ্লোরিয়ান ব্রুকার

4
"ওএস স্তর" এর কিছু মানের জন্য ... এটি উইন্ডোতেও সত্যই একটি শেল (এক্সপ্লোরার) ধারণা - কার্নেল এক্সিকিউটেবলের উপর .exe বা অন্য কোনও কিছুর যত্ন করে না। উইন্ডোজ এক্সপ্লোরার যেমন লিনাক্সের নটিলাসের চেয়ে "ওএস স্তর" বেশি যুক্তিযুক্ত হতে পারে।
মাধ্যাকর্ষণ

11

এটা সম্ভবত কহতব্য যে unixy / বোর্ন শেল, ব্যাশ, ksh, zsh, ইত্যাদি মত posixy শাঁস ওয়াইল্ডকার্ড সম্প্রসারণ না (এর উল্লিখিত glob অক্ষর পছন্দ করি *, ?, [range], [!range]এবং ধনুর্বন্ধনী এবং বর্ধিত globs মত অন্যান্য প্রসারণও) আর্গুমেন্ট এর একটি তালিকায় কম্পাইল করার আগে কমান্ড মৃত্যুদন্ড কার্যকর করা হয় সুতরাং এই সম্প্রসারণ শেল দ্বারা সম্পন্ন হয় না কমান্ড নয় যেখানে এটির পক্ষে যুক্তি হতে পারে।

অর্থাত্ শেলটি তার জন্য দায়ী *, *.*প্রসারিত হয়

 $ ls
 file.csv  file.doc  file.pdf  file.txt  file.xlsx  zz-file-without-extension

 $ (set -xv; foo *)   # is actually expanded to the following
   + foo file.csv file.doc file.pdf file.txt file.xlsx zz-file-without-extension

 $ (set -xv; foo *.*)  # note this does not match `zz-file-without-extension`
   + foo file.csv file.doc file.pdf file.txt file.xlsx

এটি সিএমডি-তে নেই (এবং একইভাবে পাওয়ারশেল ইউটিলিটিগুলির ক্ষেত্রেও নয় ) কারণ এটি বিশ্বব্যাপী অক্ষরগুলিকে এক্সিকিউটড কমান্ডের ভারব্যাটিম দিয়ে যায় - এবং সুতরাং প্রসারণ হ'ল কমান্ড / ইউটিলিটির দায়িত্ব এবং শেল নয়। সুতরাং শেষ পর্যন্ত, কী *.*বা *মানে ইউটিলিটির কাছে এটি কনভেনশনগুলিতে মেনে চলার (বা না) রেখে যায় - এ কারণেই সিএমডি-র ইউটিলিটিগুলিও dir *.*কোনও এক্সটেনশন ছাড়াই ফাইলগুলি (যুক্তিযুক্তভাবে ভুলভাবে প্রত্যাশা সংরক্ষণ করে) এর মতো মেলে।

আমি বিশ্বাস করি যে এইভাবে সংক্ষেপ করা নিরাপদ।

  • সিএমডি এর অধীনে এটি ইউটিলিটির উপর নির্ভর করে।
  • পাওয়ারশেলের অধীনে, ওয়াইল্ডকার্ডপ্যাটার্ন শ্রেণীর ব্যবহার করা ইউটিলিটিগুলি পিক্সিক আচরণের একটি ধারাবাহিক উপসেট সরবরাহ করবে।

আর একটি পার্থক্য হ'ল সিএমডি-এর অধীনে বেশিরভাগ প্রোগ্রামগুলি কাঁচা ওয়াইল্ডকার্ডকে কার্নেল (ফাইন্ডফার্সফায়ার) এ ফরোয়ার্ড করে থাকে, যখন লিনাক্সের গ্লোব পুরো তালিকাটি ধরে ফেলে এবং ব্যবহারকারীর স্পেসে ফিল্টারিং করে।
মাধ্যাকর্ষণ

আপনি যখন এক মিলিয়ন ফাইল দিয়ে ডিরেক্টরিতে * চালাবেন, কমান্ডটি অনেকগুলি পরামিতিগুলির অভিযোগ করবে। সবচেয়ে খারাপ ক্ষেত্রে, এটি নিঃশব্দে তালিকার লেজটি ফেলে দিতে পারে। এই ক্ষেত্রে, আপনার দুটি বা ততোধিক কমান্ড পাইপ করা প্রয়োজন, বা কোনও ফাইলের ফাইলের একটি তালিকা সংরক্ষণ করতে হবে, যাতে অন্য প্রক্রিয়াটি তালিকাটি পড়তে পারে।
এনরিক নেভাল

3
@ গ্রায়েটি আরও নির্ভুল হতে, ফিল্টারিংটি উইন্ডোজের ফাইল সিস্টেম ড্রাইভার দ্বারা করা হয়। এটি নেটওয়ার্ক ফাইল সিস্টেমে বিশেষত কার্যকর (বিশেষত ফিরে যখন আপনি কোনও রিমোট ফাইল সিস্টেমে 8 কিলোবাইট লাইন চালাচ্ছিলেন) তবে এর অর্থ এটি আপনি স্বেচ্ছাসেবী অনুসন্ধানের পাশাপাশি স্পষ্টভাবে সমর্থনযোগ্য অনুসন্ধানগুলিও করতে পারবেন না। এর প্রভাবগুলি রেমন্ড চেনের ব্লগে বহুবার অনুসন্ধান করা হয়েছে। FindFirstFileনিজেই ব্যবহারকারী-মোড (উভয় কার্নেল 32.dll এবং ntdll.dll ব্যবহারকারী-মোড লাইব্রেরি - এটি উইন 32 সাবসিস্টেমের অংশ, কার্নেল নয়) তবে এটি আসলে খুব বেশি কিছু করে না।
লুয়ান

আহ, আমি এই ধারণাটির মধ্যে ছিলাম যে ফাইন্ডফার্সফায়াল একটি খুব সহজেই একইভাবে নামের একটি সিস্কেলকে আবৃত করে (যেমন কীভাবে উন্মুক্ত (3) লিবাসিতে কেবল উন্মুক্ত (2) লিনাক্স কার্নেলের মধ্যে আবৃত)।
মাধ্যাকর্ষণ

1
@ কুপ: শেলগুলি প্রসারিত হতে বাধা দিতে কেবল উদ্ধৃতিগুলি ব্যবহার করুন, যাতে আপনি সেগুলি কমান্ডগুলিতে দিতে পারেন। যেমন mmv "fred.*" "tom.#1"। ( #1পরিবর্তে প্রতিস্থাপনটি ব্যবহার করে *, এতে আপনাকে পুনরায় অর্ডার দেওয়ার ক্ষেত্রের সুবিধা রয়েছে)। mmvবেশিরভাগ সিস্টেমে ডিফল্টরূপে ইনস্টল করা হয় না, তবে অন্যান্য ব্যাচ-নামকরণ সরঞ্জামগুলি প্রায়শই থাকে। এটি সম্পর্কে এই নিবন্ধটি দেখুন , এবং stackoverflow.com/questions/417916/how-to-do-a-mass-rename
পিটার কর্ডেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.