আপনি কী -xec ব্যবহার করার সময় ফাইন্ড কমান্ডের ফাইলনাম আউটপুট করবেন?


33

আমি পিডাব্লুডির সমস্ত সাব-ডিরেক্টরি খুঁজে পেতে এবং svnadmin verifyপ্রতিটি ডিরেক্টরিতে চালানোর জন্য নিম্নলিখিত লাইনটি ব্যবহার করি (আমি ইতিমধ্যে জানি যে তারা সাবভার্সন সংগ্রহস্থল)

find ./* -maxdepth 0 -exec svnadmin verify {} \;

আউটপুটটি দেখতে দেখতে এটিকে বাদ দিয়ে এটি ভালভাবে কাজ করে:

* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.

লগিং সহজ করার জন্য, কমান্ডটি findকার্যকর করার আগে আমি ফাইলের নামটি প্রিন্ট করতে চাই svnadmin verify

আমি lsসেখানে কিছুটা চেপে ধরার চেষ্টা করেছি কিন্তু এটি বোধহয় করেছি, আমার কীভাবে এটি করা উচিত (পছন্দমত সহজভাবে)?

উত্তর:


36

কেবল -printfআগে একটি বিকল্প যুক্ত করুন

find -printf '%p' -exec command \;

4
বাহ, আমি পরিবর্তিত '%p'করতে '%p\n'যাতে নাম তার আগে বসেছে নিজস্ব লাইনে আউটপুট যাচাই করুন।
অ্যারোনিকাল

17
@ অ্যারোনিকাল যদি এটি আপনার পছন্দ মতো ফর্ম্যাট থাকে তবে আপনি (ফর্ম্যাট) -printf '%p\n'সরল-print
স্টিল্ড্রাইভার

4
find -name <a_name> -print -exec command {} \;
টলিভিড়া

14

আপনি যদি পুনরাবৃত্তি করতে না চান তবে ব্যবহার করার কোনও মানে নেই find। এটি সরাসরি শেলের মধ্যে করা সহজতর:

for d in */; do echo "$d"; svnadmin verify "$d"; done

for d in */সব ডিরেক্টরি (পাবেন */নিশ্চিত শুধুমাত্র ডিরেক্টরি এবং কোন ফাইল পাওয়া যায়); echo "$d"ডিরেক্টরি নাম প্রিন্ট করা হবে; The svnadmin verify "$d"ডিরেক্টরির চেক করবে।

এটি সরাসরি কমান্ড লাইন থেকে বা কোনও স্ক্রিপ্টের মধ্যে বিন্যাসে কোনও পরিবর্তন ছাড়াই চালানো যেতে পারে।


1
এটি আমার লক্ষ্য অর্জনের আরও ভাল পদ্ধতির মতো দেখায়, তবে আমার শিরোনাম এবং প্রশ্নের রেফারেন্স findএত বেশি বলে আমাকে ফিক্সিম্যানকে উত্তর দিতে হয়েছিল । যদিও আমার জ্ঞানের উন্নতি করার জন্য ধন্যবাদ!
অ্যারোনিকাল

এর জন্য একটি গ্লোব ব্যবহার করা দরকার। Globbing স্পষ্টভাবে দরকারী & শক্তিশালী, কিন্তু আমার ব্যক্তিগত অভিজ্ঞতা সিনট্যাক্স সেট আপ করার জন্য আরো কঠিন, এবং প্রায়ই মত অন্যান্য বিষয়ের প্রয়োজন শেষ পর্যন্ত dotglobএবং globstarব্যাশ, যা একটি লম্বা, আরো জটিল স্ক্রিপ্ট তৈরি করে না। আমি বড় জটিল কাজের জন্য গ্লোবগুলি বাঁচানোর ঝোঁক রাখি, যখন findসিনট্যাক্সগুলি ফ্লাইয়ের সাথে একত্রে একসাথে ফিল্টার এবং কমান্ডগুলি একত্রে স্ট্রিং করে একত্রে ফেলে দেওয়া সহজ।
ব্যবহারকারী5359531

@ ব্যবহারকারীর 35359531 গ্লোবস্টার বা ডটগ্লোব না (যদি না আপনি জানেন যে আপনার কাছে লুকানো ফাইল রয়েছে এবং সেগুলি না চান তবে) এখানে প্রয়োজনীয়। এটি স্পষ্টতই মতামত করার একটি বিষয় তবে আপনিই প্রথম ব্যক্তি যিনি আমি কখনও এসে পৌঁছেছি যিনি তার পরিবর্তে অপ্রচলিত বিন্যাসকে findসহজ বলে বিবেচনা করেন । আমি সবসময়েই গ্লোবগুলিকে পছন্দ করি findযেহেতু আমি কেবল এগুলি কেবল আরও সহজ খুঁজে পাই না তবে অন্যান্য প্রোগ্রামগুলিতে স্বেচ্ছাসেবী ফাইল নামগুলি ব্যবহার করার সময় সেগুলি সুরক্ষিতও হয়।
টেরডন

6
find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;

আমি যুক্ত করেছি -type dযদি এটি কেবল ডিরেক্টরি হয়।


আমি উদ্ধৃত চাই {}, অন্তত মধ্যেsvnadmin verify {}
কস

দ্রুত প্রতিক্রিয়ার জন্য ধন্যবাদ। সুতরাং এই কমান্ডটিতে -execএকটি শিশু শেলটি স্প্যান করে , যেখানে 2 টি কমান্ড চালিত হয়, ;লাইনের শেষ হিসাবে ব্যবহার করে ?
অ্যারোনিকাল

5

এটা চেষ্টা কর:

for f in * ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

আপনি যদি কেবল ডিরেক্টরিগুলি চান (@ কোস নোটকে ধন্যবাদ):

for f in */ ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

নিস, কিন্তু এই ফাইল প্রক্রিয়া হবে: for f in */শুধুমাত্র ডিরেক্টরি প্রক্রিয়া হবে
কস

এটি কি কেবল কোনও স্ক্রিপ্টে কাজ করবে? বা আমি কমান্ড লাইনে এটি জারি করতে পারি?
অ্যারোনিকাল

1
@ অ্যারোনিকাল কমান্ড লাইন হিসাবেও কাজ করবে
মেথাক্স

2
  • . -maxdepth 1পরিবর্তে ব্যবহার করুন ./*, আপনার ফোল্ডার কাঠামোর প্রথম স্তরের প্রয়োজন
  • ব্যবহার করুন -type d, আপনার কেবল ফোল্ডার দরকার
  • ব্যবহার করুন ! -name ".", আপনার দরকার নেই.
  • -execশেল শুরু করতে ব্যবহার করুন
  • sh -cশেলের ভিতরে কমান্ড শুরু করতে ব্যবহার করুন

আপনার আদেশ

find . -maxdepth 1 -type d ! -name "." -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;

বা সংক্ষিপ্ত

  • -pruneফাইলটি ডিরেক্টরি হলে ব্যবহার করুন এটিতে নামবেন না

আপনার আদেশ

find . -mindepth 1 -prune -exec sh -c 'echo "{}"; svnadmin verify "{}"' \; 

-pruneবেশ মজার তো. আমি ./* -maxdepth 0ফাইন্ড .কমান্ড থেকে ফিরে এড়ানো ব্যবহার করতাম । এটি কোনও সমালোচনামূলক ত্রুটি সৃষ্টি করে না, তবে আমি আমার আউটপুটে এটি না পছন্দ করি।
অ্যারোনিকাল

1

findমুদ্রণের জন্য বিকল্প পতাকা রয়েছে, যা ইতিমধ্যে অন্যান্য উত্তরে উল্লিখিত রয়েছে। যদি আমরা সমস্যাটি দেখি তবে একইভাবে বর্তমানে প্রক্রিয়া করা ফাইলটির জন্য একাধিক কমান্ড কার্যকর করার দৃষ্টিকোণ তৈরি findকরে, একাধিক -execবিবৃতি ব্যবহারের অনুমতি দেয় । এর অর্থ আমরা ব্যবহার করতে বেছে নিতে পারি:

find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \; 

আবার, দয়া করে মনে রাখবেন এই পদ্ধতির মাত্র সঙ্গে মুদ্রণ না প্রযোজ্য echo, printfবা অন্যান্য ইউটিলিটি, কিন্তু অন্যান্য কমান্ড।


0

লুপ findথেকে আউটপুটটি পাইপ করা কার্যকর হতে পারে read:

find . | while read d; do echo "=== ${d}: ==="; svnadmin verify ${d}; done

এটি আপনাকে findএই অভিনব lsউদাহরণের মতো ফিরিয়ে দেওয়া ফাইল-নামগুলির সাথে আরও জটিল, যৌগিক কমান্ড ক্রম সম্পাদন করতে দেয় :

find . | while read f; do echo ${f} | figlet -k; done

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.