আরএম এর মধ্যে পাইপের ফলাফল


11

আমি দৌড়ানোর চেষ্টা করেছি

locate *.orig | xargs rm

কিন্তু এটা বলেছে No such file or directory

আমি এটি করার উপায়গুলি দেখেছি findকিন্তু এটি সনাক্ত করার জন্য অবজেক্টটির পুরো পথটি ফিরে আসে যাতে এটি সম্ভব হয়

উত্তর:


20

যদি ফাইলের নামগুলিতে স্পেস থাকে তবে আপনার ব্যবহার করা উচিত

locate -0 $something | xargs -0 rm

locateম্যান পৃষ্ঠা থেকে :

-0, --nullপৃথক লাইনে প্রতিটি এন্ট্রি লেখার পরিবর্তে ASCII NUL অক্ষর ব্যবহার করে আউটপুট এন্ট্রি পৃথক করুন। এই বিকল্পটি GNU xargs (1) --null বিকল্পের সাথে আন্তঃব্যবহারের জন্য ডিজাইন করা হয়েছে।

অথবা

locate $something | while read f; do rm "$f"; done

এছাড়াও, *.origশেলের প্রসার এড়াতে আপনার উদ্ধৃতি দিয়ে সুরক্ষা দেওয়া উচিত এবং এটি কোনও অচিৎ সনাক্ত করতে পাস করা উচিত।


"শেল এক্সপেনশন" বলতে কী বোঝ?
সৈনিক.মথ

আপনার দ্বিতীয় উদাহরণের জন্য +1। আমি সর্বদা ব্যবহার করি | while readযেহেতু আমার হোম ডিরেক্টরিটি ফাঁকা জায়গায় ফাইলগুলি পূর্ণ।
ম্যাটপি

@ সোলজার.মোথ: বর্তমান ফোল্ডারে যদি প্যাটার্নের সাথে সম্পর্কিত ফাইলগুলি থাকে *.origতবে শেলটি প্যাটার্নটি প্রসারিত করে বলে, file1.orig file2.orig ...এটি locateতার *.origমতো সঠিক স্ট্রিংটি দেখতে পাবে না ।
এনজোটিব

গ্রেপ স্থিত আউটপুট আপনি তারপর করতে পারেন tr '\n' '\0'
পাবলো বিয়ানচি

2

এটা xargsনাxarg


আমি মেমোরি থেকে প্রশ্ন টাইপ করার অর্থ হ'ল আপনাকে ধন্যবাদ।
সৈনিক.মোথ

ওহ ঠিক আছে. দেখে মনে হচ্ছে যে ত্রুটির পরে আপনি | পরে একটি ভুল কমান্ড স্থাপন করতে চাইছেন
ম্যাকো

0

কমান্ডটি locate *.orig | xargs rmআসলে কাজ করে তবে যা হচ্ছিল তা হ'ল ট্র্যাশে থাকা ফাইলগুলিতে locateসন্ধান *.origকরা ছিল এবং ট্র্যাশের rmক্যানের No such file or directoryমধ্যে ফাইলগুলি মুছার চেষ্টা করার সময় ত্রুটিটি ছুঁড়ে ফেলা হয়েছিল।


আপনার মূল উত্তরটিতে "মন্তব্য" হিসাবে তথ্য যুক্ত করা উচিত, অথবা আপনি মূল উত্তরটি সম্পাদনা করতে পারেন। এটি আপনার নিজের প্রশ্নের উত্তর নয়।
enzotib

এটি আমার প্রশ্নের একটি উত্তর যে কারণে আমি ত্রুটিটি পাচ্ছিলাম তা হ'ল কারণ সনাক্ত করাটি ট্র্যাসের ক্যানের মধ্যে * .orig ফাইলগুলি খুঁজে পেয়েছিল এবং আরএম সেগুলি মুছতে পারে নি। আমি আপনার উত্তরটি গ্রহণ করেছিলাম এবং অন্য দুটি উত্তরই ভোট দিয়েছি কারণ সেগুলি ভাল লেখা ছিল এবং সম্ভবত পরবর্তী কাউকে আসতে সহায়তা করবে।
সৈনিক.মথ

0

সনাক্ত করা গ্লোব্বিং করে না, তবে শেলটি করে। শেলটি প্রসারণ করে * .orig যা বর্তমান ডিরেক্টরিতে এটি খুঁজে পায় যা * .orig এর সাথে মেলে।

শুধু ব্যবহার

locate .orig

এবং যদি এটি আপনার প্রয়োজন মতো হয়ে যায়

locate .orig | xargs rm

অথবা, এনজোটিব যেমন উল্লেখ করেছেন

locate -0 .orig | xargs -0 rm

যদি আপনার ফাইলনেমে সাদা অংশ থাকে।


0

একটি কৌশল: সমস্ত পাথ tmp ফাইলে সংরক্ষণ করুন। তারপরে, এটি লুপ করুন:

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

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