কোনও নির্দিষ্ট প্যাটার্নের সাথে মিলে যাওয়াগুলি বাদ দিয়ে আপনি ডিরেক্টরিতে সমস্ত ফাইলের সাথে মেলে কয়েকটি শেলের মধ্যে উন্নত গ্লোব্বিং নিদর্শনগুলি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ksh, bash বা zsh এ, কমান্ডটি
shopt -s extglob ## needed in bash only
setopt ksh_glob ## needed in zsh only
mv /source/!(*.bak) /destination
সব ফাইল সরানো হবে /source
থেকে /destination
ম্যাচিং ফাইলের জন্য ছাড়া *.bak
। Zsh এ, আপনি /source/^*.bak
প্রথম চালনা করলে setopt extended_glob
এবং আরও সাধারণভাবে (আবার প্রয়োজনীয় setopt extended_glob
) /source/*~*.bak
(বা /source/a*~*.bak
সমস্ত ফাইলের জন্য যাদের নাম শুরু হয় ফাইলগুলি a
বাদ দিয়ে .bak
ইত্যাদি) লিখতে পারেন ।
জেডএসের একটি গণকপি / মুভ / লিঙ্ক কমান্ড রয়েছে যা অন্যদের মধ্যে, প্যাটার্নের সাথে মিলে যাওয়া ফাইলগুলি বাদ দিয়ে সমস্ত ফাইল সরিয়ে নিতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ড ছাড়া সব ফাইল চলে আসে *.bak
থেকে /source
থেকে target
, এবং যোগ করে .bak
প্রক্রিয়ায় তাদের নামের:
autoload zmv
zmv '/source/(*)~*.bak' '/target/$1.bak'
rename
চারদিকে ভাসমান নামে বেশ কয়েকটি কমান্ড রয়েছে। ডেবিয়ান এবং উবুন্টুতে, /usr/bin/rename
একটি পার্ল স্ক্রিপ্ট যা ফাইলগুলিকে পার্ল এক্সপ্রেশন দ্বারা উত্পন্ন নতুন নামে নিয়ে যায়। আপনি যদি ফাইলটি বাদ দিতে চান তবে নতুন নাম উত্পন্ন না করে ফাইলের নাম পরিবর্তন থেকে বাদ দিতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ড (এই নির্দিষ্ট rename
প্রোগ্রামটি ব্যবহার করে ) *.bak
থেকে সমস্ত ফাইল সরিয়ে /source
নিয়েছে /target
:
rename 's!/source!/target! unless m!\.bak$!' /source/*
আপনি find
যে ফাইলগুলি সরাতে চান তা নির্বাচন করতে আপনি কমান্ডটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, নিম্নলিখিত কমান্ড ছাড়া সমস্ত নিয়মিত ফাইল চলে আসে *.bak
মধ্যে /source
বা মধ্যে একটি সাব /target
(নোট যে, ডিরেক্টরি অনুক্রমের সঙ্কুচিত করা হয়):
find /source -type f \! -name '*.bak' -exec mv {} /target/ \;
বা (সরানোর জন্য অনেকগুলি ফাইল থাকলে আরও কার্যকর)
find /source -type f \! -name '*.bak' -exec sh -c 'mv "$@" "$0"' /target/ {} +
rsync
একটি সাধারণীকরণ cp
এবং scp
খুব শক্তিশালী সঙ্গে বিধিগুলি অন্তর্ভুক্ত / বাদ দিন। উদাহরণস্বরূপ, কমান্ড কপি ছাড়া সব ফাইল নিম্নলিখিত *.bak
মধ্যে /source
বা মধ্যে একটি সাব /target
, ডিরেক্টরি অনুক্রমের সম্মান:
rsync -a --exclude '*.bak' /source/ /target/
pax
cp
স্টেরয়েডগুলিতে অন্য জিনিসগুলির মধ্যে রয়েছে । এর বাদ দেওয়ার নিয়মগুলি আরএসসিএন-এর মতো প্রায় শক্তিশালী নয়, তবে ফাইলগুলি অনুলিপি করার সাথে সাথে এর নতুন নামকরণের অতিরিক্ত ক্ষমতাও রয়েছে। আপনি যদি খালি স্ট্রিংয়ে কোনও ফাইলের নাম পরিবর্তন করেন তবে এটি অনুলিপি থেকে বাদ দেওয়া হয়। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি *.bak
ইন /source
বা একটি উপ-ডিরেক্টরি বাদে সমস্ত ফাইল অনুলিপি /target
করে .bak
এবং পাসিংয়ে ফাইলগুলির নাম পরিবর্তন করে ।
cd /source && pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' . /target/
উপরের উদাহরণটিতে ডাইরেক্টরিগুলি তৈরি করার দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া রয়েছে foo.bak
, যা এর find
সাথে একত্রিত হয়ে এড়ানো যায় pax
:
{ cd /source && find . -type f; } | \
pax -rw -pp -s '/.*\.bak$//' -s '/$/.bak/' /target/
mv file1 file2 /path/to/destination
আপনি যা করতে চান তা করবে না