xargs
কাজের জন্য সরঞ্জাম। যে, বা find
সাথে -exec … {} +
। এই সরঞ্জামগুলি বহুবার একটি কমান্ড চালায়, যতগুলি যুক্তি এক সাথে যেতে পারে।
পরিবর্তনশীল আর্গুমেন্টের তালিকাটি যখন শেষ হয় তখন উভয় পদ্ধতিই কার্যকর করা সহজ, যা এখানে ক্ষেত্রে হয় না: এর চূড়ান্ত যুক্তি mv
হ'ল গন্তব্য। জিএনইউ ইউটিলিটিগুলির সাথে (অর্থাত্ এমবেডেড লিনাক্স বা সাইগউইন-তে) প্রথমে গন্তব্যটি পাস করার -t
বিকল্পটি mv
কার্যকর।
যদি ফাইলের নামগুলির কোনও শ্বেত স্থান বা কোনও কোনও না থাকে \"'
তবে আপনি কেবলমাত্র ফাইলের নামগুলিতে ইনপুট হিসাবে সরবরাহ করতে পারেন xargs
( echo
কমান্ডটি ব্যাশ অন্তর্নির্মিত, সুতরাং এটি কমান্ড লাইনের দৈর্ঘ্যের সীমা সাপেক্ষে নয়):
echo !(*.jpg|*.png|*.bmp) | xargs mv -t targetdir
আপনি ডিফল্ট উদ্ধৃত বিন্যাসের পরিবর্তে নাল-সীমাবদ্ধ ইনপুট ব্যবহার করতে -0
বিকল্পটি ব্যবহার করতে পারেন xargs
।
printf '%s\0' !(*.jpg|*.png|*.bmp) | xargs -0 mv -t targetdir
বিকল্পভাবে, আপনি ফাইলগুলির নামের তালিকা তৈরি করতে পারেন find
। সাব-ডিরেক্টরিতে পুনরাবৃত্তি এড়াতে, ব্যবহার করুন -type d -prune
। যেহেতু তালিকাবদ্ধ চিত্র ফাইলগুলির জন্য কোনও ক্রিয়া নির্দিষ্ট করা হয়নি, কেবলমাত্র অন্য ফাইলগুলি সরানো হয়েছে।
find . -name . -o -type d -prune -o \
-name '*.jpg' -o -name '*.png' -o -name '*.bmp' -o \
-exec mv -t targetdir/ {} +
(এতে শেল ওয়াইল্ডকার্ড পদ্ধতির বিপরীতে ডট ফাইল রয়েছে)
আপনার যদি জিএনইউ ইউটিলিটি না থাকে তবে আপনি যুক্তিটি সঠিক ক্রমে পেতে একটি মধ্যবর্তী শেল ব্যবহার করতে পারেন। এই পদ্ধতিটি সমস্ত পসিক্স সিস্টেমে কাজ করে।
find . -name . -o -type d -prune -o \
-name '*.jpg' -o -name '*.png' -o -name '*.bmp' -o \
-exec sh -c 'mv "$@" "$0"' targetdir/ {} +
Zsh, আপনি লোড করতে পারেন mv
builtin :
setopt extended_glob
zmodload zsh/files
mv -- ^*.(jpg|png|bmp) targetdir/
বা যদি আপনি mv
এবং অন্যান্য নামগুলি বাহ্যিক আদেশগুলি উল্লেখ করতে চান তবে:
setopt extended_glob
zmodload -Fm zsh/files b:zf_\*
zf_mv -- ^*.(jpg|png|bmp) targetdir/
বা ksh- শৈলী গ্লোব সহ:
setopt ksh_glob
zmodload -Fm zsh/files b:zf_\*
zf_mv -- !(*.jpg|*.png|*.bmp) targetdir/
বিকল্পভাবে, জিএনইউ mv
এবং zargs
:
autoload -U zargs
setopt extended_glob
zargs -- ./^*.(jpg|png|bmp) -- mv -t targetdir/