উত্তর:
এটি করার সর্বোত্তম উপায় হ'ল অবস্থানগত পরামিতি ব্যবহার করা। আর $()হয় পছন্দের কমান্ড প্রতিকল্পন কুমার ব্যাকটিক জন্য কারণ এটির আরও বেশি পাঠযোগ্য এর (একক উদ্ধৃতি সঙ্গে গুলিয়ে ফেলা হয় না) এবং সহজে পলায়নের অনেক কাজ করেও নেস্টেড করা যেতে পারে।
find . -exec bash -c 'echo Blah: $(stat -c %a "$@")' _ {} \;
আন্ডারস্কোর এর জন্য একটি স্থানধারক $0।
কিসের জন্য?
find ... -printf 'Blah: %m\n'
বা bash -cআপনার যদি সত্যিই করতে হয় তা ব্যবহার করুন :
find . -exec bash -c 'echo Blah: `stat -c %a {}`' \;
bash -cঅনুরূপ বা অনুরূপ করতে হবে।
তাদের (এএফআইএইকি) ব্যবহারের একমাত্র উপায় হ'ল এটিকে ব্যাশ স্ক্রিপ্ট ফাইলে স্থাপন করা এবং স্ক্রিপ্টটি ইন-এক্সেক ব্যবহার করা। একই জিনিস$()
ভুলে যাবেন না xargs! আপনার উদাহরণ পাওয়া প্রতিটি ফাইলের জন্য একটি নতুন শেল প্রক্রিয়া শুরু করবে।
আমি এটি পছন্দ করব:
find ... | xargs stat -c "Blah: %a"
findপ্রাপ্ত সমস্ত কিছুর একটি তালিকা আউটপুট করে, xargsআর্গুমেন্টের একটি তালিকা পড়ে stdinএবং কমান্ড লাইনে those যুক্তিগুলির সাথে তার পরামিতিটি কার্যকর করে, যতক্ষণ সম্ভব কমান্ড লাইন তৈরি করে। এটি কাজ করে কারণ stat, অন্যান্য যথাযথ কমান্ড / প্রোগ্রামগুলি যে কোনও পরামিতি নেয়। (তুলনা ls, rmএবং echoউদাহরণস্বরূপ)
আপনি যদি মনে করেন যে প্রতিটি ফাইলের জন্য একটি নতুন প্রক্রিয়া চালু করা একেবারে প্রয়োজনীয়, তবে প্রতিটি কমান্ডে xargs -n 1কেবলমাত্র 1প্যারামিটারটি ব্যবহার করুন । এইভাবে আপনি অকার্যকর পদ্ধতিগুলির নকল করতে পারেন:
find ... | xargs -n 1 stat -c "Blah: %a"
(ধীর কম্পিউটার এবং পার্থক্যের সময়কে বড় ফাইল সিস্টেমে এটি ব্যবহার করে দেখুন!)
findকার্যকর করার আগে একবার মূল্যায়ন করা হয় এবং ফলাফলটি স্থির প্যারামিটার হিসাবে সন্ধানের জন্য ব্যবহৃত হয়।