আমি কীভাবে লিনাক্সে xargs দিয়ে ফাইলগুলি সরাতে পারি?


24

আমি এটি চেষ্টা করছি এবং এটি কাজ করছে না:

ls file_* | xargs mv {} temp/

কোন ধারনা?


এর একাধিক ফাইল মুভ সংস্করণ সহ কেউ? ( xargs -n10উদাহরণস্বরূপ)
গার্ট ভ্যান ড্যান বার্গ

উত্তর:


31

ওএস এক্সে:

ls file_* | xargs -J {} mv {} temp/

লিনাক্সে:

ls file_* | xargs -i {} mv {} temp/

1
লিনাক্সে, কমপক্ষে, /শেষে optionচ্ছিক। আপনি চাইলে এটি অন্তর্ভুক্ত করতে পারেন তবে এটি প্রয়োজনীয় নয়।
স্কট 4

4
@ ব্যবহারকারী1953864: -i(বা -J) একটি টোকেন নির্দিষ্ট করুন যা আগত যুক্তিগুলির সাথে প্রতিস্থাপিত হবে, পরিবর্তে কেবল শেষের দিকে তাক করা হবে। man xargs
আমদান

14
আপনি পারে বলার কি দরকার -i{}একটি স্থান ছাড়া। বা বলুন -I {}
স্কট

1
আমি লক্ষ্য করেছি যে ""} "এর জায়গায়"% "ব্যবহার করাও কাজ করে -% এর অর্থ কী এবং {? এর অর্থ কী? উদাহরণ: ls ফাইল_ * | xargs -I% mv% temp /
dmonopoly

3
@ ডমনোপলি: এগুলি কিছুই বোঝায় না । প্যারামিটারটি যাই হোক না কেন -i, এটি প্রতিস্থাপন হচ্ছে getting ls file_* | xargs -iFOO mv FOO temp/ঠিক একই কাজ করে।
আমদান

8

find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;

findlsআপনার শেল দ্বারা অনুমোদিত প্রোগ্রাম আর্গুমেন্টের সংখ্যার চেয়ে আরও বেশি ফাইল থাকতে পারে তার থেকে ভাল ।


2
নোট করুন যে প্রশ্নটি file_*বর্তমান ডিরেক্টরিতে কেবল ফাইলগুলি প্রক্রিয়া করার ইচ্ছাকে পরামর্শ দেয় , যখন find(অতিরিক্ত বিকল্প ছাড়াই) বর্তমান ডিরেক্টরিতে সম্পূর্ণ ডিরেক্টরি ট্রিটি অনুসন্ধান করবে tree
স্কট 4

1
হ্যা, সত্য. -maxdepth 0এটি প্রতিরোধ করতে যোগ করুন ।

"ভাল" বিষয়গত হয়। আরও শক্তিশালী, আরও জটিল এবং ধীর; এবং mvআপনি যদি একসাথে বা স্বতন্ত্রভাবে ফাইলগুলি প্রক্রিয়া করেন তখন কিছু যত্নশীল হয় না, অন্য কিছু ব্যবহার সম্ভবত।
আমদান

সম্পাদিত (যুক্ত -maxdepth 0)

8

এমভিতে "লক্ষ্য নির্দেশনা নির্দিষ্ট করুন" ব্যবহার করুন - এটি ফাইলগুলি * গন্তব্য ডিরেক্টরি / টেম্পে স্থানান্তরিত করে কাজ করা উচিত

উদা: - # এসএল-এল ফাইল * | xargs এমভি -টি / টেম্পোর


4

@ User1953864 দ্বারা প্রস্তাবিত: { -i, -J} একটি টোকেন নির্দিষ্ট করুন যা আগত যুক্তিগুলির সাথে প্রতিস্থাপিত হবে।

উদাহরণস্বরূপ ls:

something.java  exampleModel.java  NewsQueryImpl.java  readme someDirectory/

তারপরে সমস্ত জাভা ফাইলগুলিকে কিছু ডিরেক্টরী ফোল্ডারে সরানো xargsনিম্নরূপ হবে:

লিনাক্সে

ls *.java | xargs -i mv {} someDirectory/

ম্যাকোজে

ls *.java | xargs -J mv {} someDirectory

0

আর একটি সমাধান হতে পারে:

 for f in file_* ; do
   mv $f temp/$f
 done

অসুবিধাটি হ'ল এটি mvপ্রতিটি ফাইলের জন্য একটি নতুন প্রক্রিয়া কাঁটাচামচ করে ।

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