আমি এটি চেষ্টা করছি এবং এটি কাজ করছে না:
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/ \;
findlsআপনার শেল দ্বারা অনুমোদিত প্রোগ্রাম আর্গুমেন্টের সংখ্যার চেয়ে আরও বেশি ফাইল থাকতে পারে তার থেকে ভাল ।
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উদাহরণস্বরূপ)