-এজেকের কাছে কী অনুপস্থিত যুক্তি?


15

30 দিনেরও বেশি পুরানো একটি ডিরেক্টরি, ফাইল এবং ডিরেক্টরি মুছে ফেলার জন্য আমি নীচের কমান্ডটি ব্যবহার করি এবং তাদের সংরক্ষণাগার ডিরেক্টরিতে সরাতে পারি যা আমি কয়েক সপ্তাহ পরে মুছতে পারি যদি কেউ তাদের ফাইলগুলি ফিরে না জিজ্ঞাসা করে। লক্ষ্য ডিরেক্টরিতে ব্যবহারকারীর নাম অনুসারে সাব-ডিরেক্টরি রয়েছে, সুতরাং সংরক্ষণাগার ডিরেক্টরিটিও থাকবে।

এই হুকুমটি আমি ব্যবহার করি:

find /path/to/directory/username/ -mtime +30 -exec mv "{}" /path/to/archive/username/ \;

উবুন্টুকে জিজ্ঞাসা করার প্রশ্নের উত্তর দেওয়ার জন্য আমি এর পরিবর্তিত সংস্করণটির পরামর্শ দিয়েছিলাম, অন্য একজন ব্যবহারকারী কোডটি সম্পাদনা করে লাইনের শেষ পরিবর্তন করার \;জন্য +কারণ এটি দ্রুত (এবং আরও সঠিক?)। এখানে দেখো

যাইহোক, +এইভাবে ব্যবহার করে যদি -execকমান্ডটি ব্যবহৃত হয় ls -lhতবে আমি যে প্রকৃত কমান্ডটি ব্যবহার করি তা না হয়। যদি আমি এটির সাথে চেষ্টা করি তবে আমি +একটি ত্রুটি বার্তা পাই:

find: missing argument to '-exec'

আমি বুঝতে পারি না কেন এটি এমন আচরণ করছে, বা সঠিক আদেশটি কী হবে। দয়া করে কেবল একটি আদেশ সংশোধন পোস্ট করবেন না, আমি কেবল পরামর্শকে অন্ধভাবে অনুসরণ না করে বুঝতে চাই।


আপনি এই উত্তর উল্লেখ করা হয় ? এটি কেন ব্যাখ্যা করতে পারে
উইল্ফ

ধন্যবাদ @ উইলফ আমি আপডেটটি দিয়েছি যে উত্তরটি সম্পাদিত হয়েছে তার উত্তরটি দেখাতে। আপনার সরবরাহিত লিঙ্কটির আরও একটি লিঙ্ক রয়েছে যা এটি আমার মস্তিষ্কের সাথে মোকাবিলা করতে পারে এমনভাবে ব্যাখ্যা করে।
অ্যারোনিকাল


ধন্যবাদ @ সৌরভকে একটি উজ্জ্বল চক্রাকার পদ্ধতিতে যে প্রশ্নটি আমার আদেশটি সম্পাদনা করেছেন সেই ব্যবহারকারী দ্বারা! অবশেষে আমি এটি +একই কমান্ডে একাধিক যুক্তি সরবরাহ করি , কিন্তু mvএটি সহ্য করতে পারি না!
অ্যারোনিকাল

@ অ্যারোনিকাল এমভি পারেন, আমার উত্তরটি দেখুন ^^
বিশৃঙ্খলা

উত্তর:


19

এই পোস্টের ব্যবহারকারী বলতে পারে যে +কোনও -execকমান্ডের শেষে সাইনটি দ্রুত, তবে কেন নয়।

অনুমান করতে দেয় findকমান্ড নিম্নলিখিত ফাইলগুলি ফিরে

/path/to/file1
/path/to/file2
/path/to/file3

সাধারণ -execকমান্ড ( -exec command {} \;) প্রতিটি ম্যাচ করা ফাইলের জন্য একবার চালায়। উদাহরণ স্বরূপ:

find ... -exec mv {} /target/ \;

executes:

mv /path/to/file1 /target/
mv /path/to/file2 /target/
mv /path/to/file3 /target/

আপনি যদি +চিহ্ন ( -exec command {} +) ব্যবহার করেন তবে কমান্ডটি শেষে কমান্ডটি একাধিক ম্যাচযুক্ত ফাইল যুক্ত করে নির্মিত হবে। উদাহরণ স্বরূপ:

find ... -exec mv -t /target/ {} +

executes:

mv -t /target/ /path/to/file1 /path/to/file2 /path/to/file3

+পতাকাটি সঠিকভাবে ব্যবহার করতে যুক্তির প্রক্রিয়াটি অবশ্যই কমান্ডের শেষে হওয়া উচিত, মাঝখানে নয়। এজন্যই আপনার উদাহরণে findট্রোকস missing argument to '-exec'; এটি সমাপ্তি মিস করে {}


আমি সর্বদা ভাবছিলাম কেন find -execএটি {}ব্যবহারের সময় শেষ আর্গ হিসাবে হওয়া দরকার +। যে কেউ কেন জানেন যে ডিজাইনের সিদ্ধান্তটি কেন ওপি'র কমান্ড লাইনের মতো নির্মাণের পরিবর্তে করা হয়েছিল?
পিটার কর্ডেস

11

ব্যবহারকারী তাদের সম্পাদনা ব্যাখ্যা করেছেন ....

'+' এক্সিকিউটের টার্মিনেটর '\' এর চেয়ে দ্রুত  /ubuntu/558817/ কি-is-the-differences-between- using-and-in-exec-command দেখুন;  এবং আসল ফাইল থেকে একটি ব্যাকআপ ফাইল তৈরি করা ভাল ধারণা

... এই লিঙ্কটি ব্যবহার করে । আমি মনে করি মূলত একাধিক কমান্ড ব্যবহার করার পরিবর্তে এটি সমস্ত ফাইল-নাম একটি কমান্ড উদাহরণে প্রেরণ করে, জিনিসগুলিকে গতি বাড়িয়ে তোলে। এখানে একটি উদাহরণ এখানে :

সেমিকোলন ( find . -exec ls '{}' \;) দিয়ে -exec ব্যবহার করা কার্যকর হবে

ls file1
ls file2
ls file3

তবে আপনি যদি এর পরিবর্তে প্লাস চিহ্ন ব্যবহার করেন ( find . -exec ls '{}' \+), সমস্ত ফাইলের নাম একটি একক কমান্ডে যুক্তি হিসাবে পাস করা হবে:

ls file1 file2 file3

অন্যান্য ফর্ম ব্যবহার করে পাওয়া যায় ;এবং +থেকে পাশাপাশি ( এখানে :)

অতএব নিম্নলিখিত আদেশ বাক্যটি কমান্ড সন্ধানের জন্য অনুমোদিত:

find . -exec echo {} \;
find . -exec echo {} ';'
find . -exec echo {} ";"
find . -exec echo {} \+
find . -exec echo {} +

যাইহোক, আমি নিশ্চিত না এই, সরানো কমান্ড যাহাই হউক না কেন সঙ্গে কাজ করবে যেমন এর সিনট্যাক্স নই mv [OPTION]... SOURCE DEST, যদি না -tবিকল্প বা অনুরূপ ব্যবহার করা হয়। তবে এটি lsকোনও অতিরিক্ত বিকল্প ইত্যাদির সাথে কাজ করা উচিত যেমন তারা একাধিক ফাইলের নাম দেওয়ার পরে বুঝতে পারে। +এছাড়াও পলান করা প্রয়োজন হতে পারে (যেমন \+)


উভয় দুর্দান্ত উত্তর, তবে আমি সামান্য কিছুটা দ্রুত হওয়ার জন্য, এবং mv -tউভয় +1 এর ব্যাখ্যা দেওয়ার জন্য বিশৃঙ্খলাটিকে এটিকে দিতে পেরেছি !
অ্যারোনিকাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.