কোনও নির্দিষ্ট প্যাটার্নের সাথে মিলে যাওয়াগুলি বাদ দিয়ে আপনি ডিরেক্টরিতে সমস্ত ফাইলের সাথে মেলে কয়েকটি শেলের মধ্যে উন্নত গ্লোব্বিং নিদর্শনগুলি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, 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/
paxcpস্টেরয়েডগুলিতে অন্য জিনিসগুলির মধ্যে রয়েছে । এর বাদ দেওয়ার নিয়মগুলি আরএসসিএন-এর মতো প্রায় শক্তিশালী নয়, তবে ফাইলগুলি অনুলিপি করার সাথে সাথে এর নতুন নামকরণের অতিরিক্ত ক্ষমতাও রয়েছে। আপনি যদি খালি স্ট্রিংয়ে কোনও ফাইলের নাম পরিবর্তন করেন তবে এটি অনুলিপি থেকে বাদ দেওয়া হয়। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি *.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আপনি যা করতে চান তা করবে না