উত্তর:
এটি আপনি যা খুঁজছেন তা করে:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
এর find
পরিবর্তে এটি ব্যবহার করে ls
, সাধারণত, পার্সিং ls
আউটপুট অবিশ্বাস্য । এই ফর্মটি ব্যবহার find
করেও ফাইলনামগুলির সাথে কাজ করবে এমনকি তাতে নতুন লাইন বা অন্যান্য কঠিন অক্ষর রয়েছে।
ব্যাখ্যা
find . -maxdepth 1 -type f -print0
এটি ফাইল নির্বাচন করে। এটি অনেকগুলি বিকল্পের বিকল্প ব্যবহার করে কাস্টমাইজ করা যায়। বিকল্পটি নাল-বিচ্ছিন্ন তালিকায় ফাইলের নাম মুদ্রণ করতে print0
বলে find
। ফাইলের নামের তালিকা এইভাবেই প্রেরণযোগ্য reliable
xargs -L1 -p0 chmod +x
এটি ফাইলের নামের নাল-বিচ্ছিন্ন তালিকাটি তৈরি করে find
এবং এতে আপনার আদেশটি প্রয়োগ করে।
-L1
বিকল্প বলে xargs
একবারে শুধুমাত্র একটি ফাইল নামের উপর কাজ করে। -p
বিকল্প বলে xargs
চালিয়ে যাওয়ার আগে অনুমোদনের জন্য প্রম্পট করতে। -0
বিকল্প বলে xargs
ফাইলের নাম মধ্যে বিভেদক হিসাবে নাল অক্ষর ব্যবহার করতে।
[ @ কোয়ান এটি নির্দেশ না -p
করা xargs
পর্যন্ত আমি বিকল্পটি সম্পর্কে অসচেতন ছিলাম ।]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
সুতরাং এটি সঙ্গে কাজ করে -maxdepth 1
সামনে -type f
, যেমন: find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
।
আপনি ব্যবহার করতে পারেন xargs
।
উদাহরণ:
ls|xargs -I path -p chmod +x path
বিকল্প -p
: প্রতিটি কমান্ড লাইন চালাতে হবে এবং টার্মিনাল থেকে একটি লাইন পড়তে হবে কিনা সে সম্পর্কে ব্যবহারকারীকে অনুরোধ করুন। 'Y' বা 'Y' দিয়ে প্রতিক্রিয়া শুরু হলে কেবল কমান্ড লাইনটি চালান।
xargs -p
এত পছন্দ করি যে আমি এটি অনুলিপি করব।
touch "a very long file name
এন্টার টিপুন। লাইন ধারাবাহিকতা দেখুন এবং কেবল সমাপ্তি উদ্ধৃতি টাইপ করুন এবং আবার এন্টার টিপুন। টেডা, ফাইলনেলে নতুন লাইন। দীর্ঘ ফাইলের নামটি টাইপ করতে অলসতার বাইরে।
find
POSIX কমান্ডটি ব্যবহার করে সামঞ্জস্য করতে পারেন-exec printf '%s\0' {} +
। যদিও POSIX পুরো জিনিসটি সামঞ্জস্য করার কোনও উপায় নেই।