Xargs দিয়ে কীভাবে আর্গুমেন্ট উদ্ধৃত করবেন


15

মনে করুন যে আমি 1 মেগাবাইটের বেশি ফোল্ডারের সমস্ত ফাইল মুছতে চাই।

$ find . -size +1M | xargs -0 rm

এটি তাদের নামে স্থান থাকা ফাইলগুলি মুছবে না। সুতরাং আমি এটিতে পাঠানো সমস্ত আর্গুমেন্টের উদ্ধৃতি দিতে চাই rm। যদি findএটি দেয় এটি Some report.docxপাস "Some report.docx"করা উচিত rm

আমি এটা কিভাবে করবো?


1
কিছু করার আগে আপনার এই mywiki.wooledge.org/UsingFind?hightlight=%28xargs%29 পড়তে হবে xargs। এছাড়াও হিসাবে উইকি প্রস্তাব দেওয়া হয়, ব্যবহার করবেন না xargsক্ষণস্থায়ী ছাড়া -print0করার find
ভ্যালেন্টাইন বাজরামি


xargs -d$'\n'ডিলিমিটারটিকে কেবলমাত্র নতুন লাইনে সীমাবদ্ধ করতে ব্যবহার করুন (এবং স্পেস নয়; এটি কোটস ইত্যাদিতে বিশেষভাবে প্রক্রিয়া করবে না - আমি একটি জিএনইউ সিস্টেমে চেক করেছি) - স্ট্যাকওভারফ্লো
ইম্জ - ইভান জাখারিয়াচেভ

উত্তর:


13

সাধারণ ব্যবহার:

find . -size +1M -delete

আপনি যদি ব্যবহার xargsএবং এর rmসাথে জোর দিয়ে থাকেন findতবে কেবল -print0আপনার আদেশে যুক্ত করুন:

find . -size +1M -print0 | xargs -r0 rm --

অন্য মাধ্যম:

find . -size +1M -execdir rm -- {} +

থেকে man find:

-print0
    True; print the full file name on the standard output, followed by a null 
character (instead of the newline character that -print uses). This allows file names 
that contain newlines or other types of white space to be correctly interpreted by 
programs that process the find output. This option corresponds to the -0 option of 
xargs.

3
এটি সমস্যার সমাধান করে তবে যুক্তিগুলি উদ্ধৃত করা অন্যান্য ক্ষেত্রে কার্যকর হবে। সুতরাং আমি অন্যান্য উত্তর ধরে রাখব। যদিও একটি সহজ সমাধানের জন্য +1।
ক্ষিতাইজ শর্মা

2
@ ক্ষিষ্টশর্মা নং, ফাইল নামটিতে কোট না থাকলে আপনি প্রবেশ "Some report.docx"করতে চান না rm। আপনি যা চান তা Some report.docxনিরবচ্ছিন্নভাবে পাস করা rm। ক্যাসিয়ার উত্তর (এখন) এর সাথে এটি করার সাধারণ উপায় দেখায় find। [ক্যাসিয়া: এর আগে ভুল পিংয়ের জন্য দুঃখিত]]
গিলস 'দোষী হওয়া বন্ধ করুন'

@ গিলস সঠিক ব্যাশে আমি সাধারণত স্ট্রিংটি উদ্ধৃত করে তা নিরবিচ্ছিন্নভাবে পাস করি। তাই উদ্ধৃত আমি কি বোঝানো দ্বারা পরিবর্তে বিভক্ত আপ হচ্ছে RM একটি একক আর্গুমেন্ট হিসাবে ফাইলের নাম পাঠাতে ছিল $0এবং $1ইত্যাদি
Kshitiz শর্মা

ওএসএক্সে আমি এর xargs -0পরিবর্তে করি xargs -r0
ल्फ

8

পাইপ থেকে আউটপুট নাল সমাপ্ত আইটেম হিসাবে ব্যাখ্যা করা হয় -0এর xargsঅর্থ বিকল্প । এই ক্ষেত্রে আপনার পাইপের সাথে ইনপুট তৈরি করতে হবে find ... -print0


6

আমার অনুরূপ প্রয়োজনীয়তা ছিল এবং -Iএকটি স্থানধারক রাখার জন্য স্যুইচটি ব্যবহার করে শেষ হয়েছিল এবং আমি এটি উদ্ধৃত করতে সক্ষম হয়েছি।

find . -size +1M | xargs -I {} rm "{}"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.