আমি অন্যান্য প্রোগ্রামগুলিতে ফাইলের নামগুলি পাইপ করতে চাই, তবে নামগুলিতে শূন্যস্থান উপস্থিত থাকাকালীন এগুলি সমস্ত শ্বাসরোধ করে।
ধরা যাক আমার কাছে একটি ফাইল আছে।
foo bar
আমি কীভাবে find
সঠিক নামটি পেতে পারি ?
অবশ্যই আমি চাই:
foo\ bar
বা:
"foo bar"
সম্পাদনা : আমি যেতে চাই না xargs
, আমি একটি সঠিকভাবে ফর্ম্যাট স্ট্রিং পেতে চাই find
যাতে আমি ফাইলের নামের স্ট্রিংটি সরাসরি অন্য কোনও প্রোগ্রামে পাইপ করতে পারি।
find
ফাইলের নামগুলি ঠিকঠাক করে ফর্ম্যাট করে; তারা প্রতি লাইনে একটি নাম লেখা হয়। (অবশ্যই, কোনও ফাইলনেমটিতে একটি নতুন লাইন অক্ষর থাকলে এটি দ্ব্যর্থক) ।
find
শেলের জন্য উপযুক্ত বিন্যাসে ফাইলের আউটপুট আউটপুট দেওয়ার বিকল্পটি উপলব্ধি করা বুদ্ধিমান হয়ে উঠবে । সাধারণভাবে, যদিও, -print0
GNU find
এক্সটেনশানটি অন্যান্য অনেক পরিস্থিতিতে (খুব) সুনির্দিষ্টভাবে কাজ করে এবং আপনার কোনও ইভেন্টে এটি ব্যবহার করতে শেখা উচিত।
ls $(command...)
তালিকাটি ফিড করে না stdin
। এটি $(command...)
সরাসরি কমান্ড লাইনে আউটপুট রাখে । সেক্ষেত্রে এটি শেল যা সি $IFS
থেকে পড়ছে এবং আউটপুটকে কীভাবে ওয়ার্ডস্প্লিট করবে তা স্থির করার জন্য এটির বর্তমান মানটি ব্যবহার করবে । সাধারণভাবে, আপনি ব্যবহার করা ভাল xargs
। আপনি একটি পারফরম্যান্স হিট লক্ষ্য করবেন না।
find -printf '"%p"\n'
প্রতিটি পাওয়া নামের চারপাশে ডাবল উক্তি যুক্ত করবে, তবে কোনও ফাইলের নামে কোনও ডাবল উদ্ধৃতি সঠিকভাবে উদ্ধৃত করবে না। বা পাইপ মাধ্যমে: আপনার ফাইলের নাম কোনো এমবেডেড উদ্ধৃতি চিহ্ন না থাকে, তাহলে আপনি সমস্যা উপেক্ষা করতে পারেন sed 's/"/&&/g;s/^""/"/;s/""$/"/'
। যদি আপনার ফাইলের নামগুলি শেল দ্বারা পরিচালিত হয় তবে আপনার সম্ভবত ডাবল উদ্ধৃতিগুলির পরিবর্তে একক উদ্ধৃতি ব্যবহার করা উচিত, যদিও (অন্যথায় sweet$HOME
এটির মতো হয়ে যাবে sheet/home/you
)। এবং এটিতে নতুন লাইনের সাথে ফাইল নামের বিরুদ্ধে এখনও খুব শক্ত নয়। আপনি কিভাবে তাদের পরিচালনা করতে চান?
-exec
পতাকা সঙ্গে সচেতনfind
? আপনি সম্ভবত এই ত্রুটিটি দূরীভূত করতে এবং আপনার কমান্ডটিকে-exec
অন্য কমান্ডগুলিতে পাইপ না করে করার দ্বারা আরও কার্যকর করতে পারেন। মাত্র আমার 0 .02