পাওয়া প্রতিটি ফাইলের জন্য "ফাইন্ড-এক্সেক" প্রসারিত ব্যাকটিক্স পাওয়া কি সম্ভব?


9

এখানে একটি কমান্ড যা কার্যকরভাবে কাজ করে:

echo Blah: `stat -c %a .`

এটি পেতে কি সম্ভব find -execপ্রতিটি ফাইল পাওয়া এই একই জিনিস চালানো, {}স্থানে .?


1
ব্যাকটিক্স সেখানে কাজ করতে পারে না কারণ এগুলি একবার findকার্যকর করার আগে একবার মূল্যায়ন করা হয় এবং ফলাফলটি স্থির প্যারামিটার হিসাবে সন্ধানের জন্য ব্যবহৃত হয়।
সেভেন

উত্তর:


10

এটি করার সর্বোত্তম উপায় হ'ল অবস্থানগত পরামিতি ব্যবহার করা। আর $()হয় পছন্দের কমান্ড প্রতিকল্পন কুমার ব্যাকটিক জন্য কারণ এটির আরও বেশি পাঠযোগ্য এর (একক উদ্ধৃতি সঙ্গে গুলিয়ে ফেলা হয় না) এবং সহজে পলায়নের অনেক কাজ করেও নেস্টেড করা যেতে পারে।

find . -exec bash -c 'echo Blah: $(stat -c %a "$@")' _ {} \;

আন্ডারস্কোর এর জন্য একটি স্থানধারক $0


6

কিসের জন্য?

find ... -printf 'Blah: %m\n'

বা bash -cআপনার যদি সত্যিই করতে হয় তা ব্যবহার করুন :

 find . -exec bash -c 'echo Blah: `stat -c %a {}`' \;

আমার তাত্ক্ষণিক সমস্যা সমাধানের জন্য ধন্যবাদ, তবে ব্যাকটিকগুলি বর্ণিত হিসাবে ব্যবহার করা যেতে পারে কিনা তা জানতে এখনও আমি আগ্রহী। আমার দিগন্তকে আরও প্রশস্ত করতে।
রোমানস্টে

আপনাকে শেলটি bash -cঅনুরূপ বা অনুরূপ করতে হবে।
ইগনাসিও ওয়াজকেজ-আব্রামস

0

তাদের (এএফআইএইকি) ব্যবহারের একমাত্র উপায় হ'ল এটিকে ব্যাশ স্ক্রিপ্ট ফাইলে স্থাপন করা এবং স্ক্রিপ্টটি ইন-এক্সেক ব্যবহার করা। একই জিনিস$()


0

ভুলে যাবেন না 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"

(ধীর কম্পিউটার এবং পার্থক্যের সময়কে বড় ফাইল সিস্টেমে এটি ব্যবহার করে দেখুন!)


আমি চেষ্টাটির প্রশংসা করি, তবে আমার সেই ব্যাকটিকগুলি দরকার । স্পষ্টতই আমার উদাহরণটি সরলীকৃত এবং প্রতিধ্বনি + স্ট্যাট ব্যবহার করে; আসল স্ক্রিপ্টটি কোনও প্রতিধ্বনি বা স্ট্যাট ব্যবহার করে না, সুতরাং স্ট্যাটাসের বিন্যাসের স্ট্রিংগুলিতে এগুলিকে একত্রে রাখার আপনার কৌশলটি মোটেই সহায়তা করে না।
রোমানস্টে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.