আমি এটি চেষ্টা করছি এবং এটি কাজ করছে না:
ls file_* | xargs mv {} temp/
কোন ধারনা?
আমি এটি চেষ্টা করছি এবং এটি কাজ করছে না:
ls file_* | xargs mv {} temp/
কোন ধারনা?
উত্তর:
ওএস এক্সে:
ls file_* | xargs -J {} mv {} temp/
লিনাক্সে:
ls file_* | xargs -i {} mv {} temp/
/
শেষে optionচ্ছিক। আপনি চাইলে এটি অন্তর্ভুক্ত করতে পারেন তবে এটি প্রয়োজনীয় নয়।
-i
(বা -J
) একটি টোকেন নির্দিষ্ট করুন যা আগত যুক্তিগুলির সাথে প্রতিস্থাপিত হবে, পরিবর্তে কেবল শেষের দিকে তাক করা হবে। man xargs
-i{}
একটি স্থান ছাড়া। বা বলুন -I {}
।
-i
, এটি প্রতিস্থাপন হচ্ছে getting ls file_* | xargs -iFOO mv FOO temp/
ঠিক একই কাজ করে।
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
ls
আপনার শেল দ্বারা অনুমোদিত প্রোগ্রাম আর্গুমেন্টের সংখ্যার চেয়ে আরও বেশি ফাইল থাকতে পারে তার থেকে ভাল ।
file_*
বর্তমান ডিরেক্টরিতে কেবল ফাইলগুলি প্রক্রিয়া করার ইচ্ছাকে পরামর্শ দেয় , যখন find
(অতিরিক্ত বিকল্প ছাড়াই) বর্তমান ডিরেক্টরিতে সম্পূর্ণ ডিরেক্টরি ট্রিটি অনুসন্ধান করবে tree
mv
আপনি যদি একসাথে বা স্বতন্ত্রভাবে ফাইলগুলি প্রক্রিয়া করেন তখন কিছু যত্নশীল হয় না, অন্য কিছু ব্যবহার সম্ভবত।
@ 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
আর একটি সমাধান হতে পারে:
for f in file_* ; do
mv $f temp/$f
done
অসুবিধাটি হ'ল এটি mv
প্রতিটি ফাইলের জন্য একটি নতুন প্রক্রিয়া কাঁটাচামচ করে ।
xargs -n10
উদাহরণস্বরূপ)