ফাইন্ড-এক্সেক বিকল্পের মাধ্যমে চালানো কমান্ডের আউটপুট পুনর্নির্দেশের জন্য আমি কীভাবে '{}' ব্যবহার করতে পারি?


28

আমি svnadmin dumpব্যাকআপ স্ক্রিপ্টের জন্য একটি কমান্ড স্বয়ংক্রিয় করার চেষ্টা করছি এবং আমি এরকম কিছু করতে চাই:

find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;

এটি কাজ করে বলে মনে হচ্ছে, এটি প্রতিটি এসএনএন সংগ্রহস্থলের মধ্যে দেখে /var/svnএবং svnadmin dumpএটিতে চলে।

তবে {}এক্সিকিউট কমান্ডের দ্বিতীয়টি ডিরেক্টরিটি প্রক্রিয়াধীন হওয়ার নামটির পরিবর্তে স্থান পায় না। এটি মূলত কেবলমাত্র একটি একক ফাইলের ফলাফল দেয় {}.svn

আমার সন্দেহ হয় যে শেলটি কমান্ডটি >শেষ করার জন্য ব্যাখ্যা করে findএবং এটি স্ট্যান্ডআউটকে সেই আদেশ থেকে নামকৃত ফাইলটিতে পুনঃনির্দেশ করার চেষ্টা করে {}.svn

কোন ধারনা?

উত্তর:


37

আপনি এইভাবে পুনঃনির্দেশটি করতে পারেন:

find /var/svn/* \( ! -name dir -prune \) -type d -exec sh -c 'svnadmin dump {} > {}.svn' \;

এবং সঠিক প্রতিস্থাপন করা হবে।


এটি ত্রুটিযুক্ত এবং খারাপ অভ্যাস। আমার এই উত্তরটির সাথে তুলনা করুন । সঠিক ভাবে পাস হয় {}একটি যুক্তি হিসেবে shএবং তারপর (অভ্যন্তরীণ sh) হিসাবে এটি পড়ুন "$0"বা "$1"তাই।
কামিল ম্যাকিয়েরোভস্কি

5

না, তবে আপনি এটি করতে একটি সরল বাশ স্ক্রিপ্ট লিখতে পারেন তারপরে এটি অনুসন্ধান থেকে কল করুন।
উদাহরণ ( /tmp/dump.sh ):

#!/bin/sh
svn admin dump "$1" > "$1".svn

তারপর:

find /var/svn/* \( ! -name dir -prune \) -type d -exec sh /tmp/dump.sh '{}' \;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.