আমি কীভাবে একটি বাদে সব ফাইল সরিয়ে নিতে পারি? আমি এরকম কিছু খুঁজছি:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
যেখানে আমি পুরানো স্টাফগুলি নতুন স্টাফ-ফোল্ডারে বাদে রাখি Tux.png
। ! -সাইন একটি অবহেলা প্রতিনিধিত্ব করে। কাজের জন্য কোনও সরঞ্জাম আছে?
আমি কীভাবে একটি বাদে সব ফাইল সরিয়ে নিতে পারি? আমি এরকম কিছু খুঁজছি:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
যেখানে আমি পুরানো স্টাফগুলি নতুন স্টাফ-ফোল্ডারে বাদে রাখি Tux.png
। ! -সাইন একটি অবহেলা প্রতিনিধিত্ব করে। কাজের জন্য কোনও সরঞ্জাম আছে?
উত্তর:
আপনি যদি ব্যাশ ব্যবহার করেন এবং extglob
শেল বিকল্প সেট থাকে (যা সাধারণত এটি হয়):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
নিম্নলিখিতটি আপনার .brcrc এ রাখুন
shopt -s extglob
এটি রেজেক্সেস প্রসারিত করে। তারপরে আপনি একটি করে বাদে সমস্ত ফাইল সরিয়ে নিতে পারবেন
mv !(fileOne) ~/path/newFolder
দ্রষ্টব্য, ডিরেক্টরিগুলি অনুলিপিতে , ফরোয়ার্ড-ফ্ল্যাশ নামটিতে থ্রেডে লক্ষ্য করা যায় না শর্ত ব্যতীত কেন ভাঙা ছাড়া এক্সটগ্লোব? :
cp -r !(Backups.backupdb) /home/masi/Documents/
তাই Backups.backupdb/
এখানে ভুল অস্বীকৃতি আগে এবং আমি কারণ ভুলভাবে ব্যবহারের ঝুঁকি ডিরেক্টরি চলন্ত তারপর অন্যান্য কমান্ড এবং সম্ভব অনান্য ব্যতিক্রমের সঙ্গে globs মধ্যে তন্ন তন্ন ব্যবহার করা হবে না।
mv !(arc*) archive_190629b
আমি theতিহ্যবাহী অনুসন্ধান এবং xargs উপায় সঙ্গে যেতে হবে:
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
এটি পুনরাবৃত্তি অনুসন্ধান না করে তোলে। আপনি যদি কেবল ফাইলগুলির বিষয়ে যত্নশীল হন তবে আপনি বলতে পারেন -type f
। -mindepth 1
এটি ~/Linux/Old
ফলাফলকে নিজের মধ্যে অন্তর্ভুক্ত করে না । এম্বেড করা নতুনলাইনগুলি সহ যে কোনও ফাইলের সাথে কাজ করে।
একটি মন্তব্যে উল্লেখ করা হয়েছে যে এমভি -t
বিকল্পটি সম্ভবত জিএনইউ এক্সটেনশন। যে সিস্টেমে এটি নেই For
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;
একটি দ্রুত উপায় হ'ল টাক্স ফাইল নামটি সংশোধন করা যাতে আপনার মুভ কমান্ডটি মেলে না।
উদাহরণ স্বরূপ:
mv Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
আমি মনে করি সবচেয়ে সহজ উপায় ব্যাকটিক্স দিয়ে with
mv `ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
সম্পাদনা:
এলএস দিয়ে ব্যাকস্ল্যাশ ব্যবহার না করে এর পরিবর্তে ওরফে ব্যবহার করা রোধ করুন, বেশিরভাগ ক্ষেত্রে ls কে এলএস - রঙ হিসাবে আলাদা করা হয়েছে।
mv `\ls -1 ~/Linux/Old/ | grep -v Tux.png` ~/Linux/New/
ধন্যবাদ @ আর্নল্ড রো
grep -v
সেখানে কেন ব্যবহার করবেন দয়া করে ব্যাখ্যা করতে পারেন ?
নির্দিষ্ট ফাইল বা ডিরেক্টরিগুলি বাদ দেয় না এমন সরল পদক্ষেপের জন্য নির্ভর করতে আমি এটি কিছুটা নিরাপদ এবং সহজ বলে মনে করি।
ls -1 | grep -v ^$EXCLUDE | xargs -I{} mv {} $TARGET
-l
বিকল্প ls
কমান্ড লাইন অপ্রাসঙ্গিক তথ্য অনেক অন্তর্ভুক্ত করা এবং mv কমান্ড ব্যর্থতার স্থাপিত হবে।
নিম্নলিখিতটি 100% গ্যারান্টিযুক্ত পদ্ধতি নয় এবং স্ক্রিপ্টিংয়ের জন্য মোটেও চেষ্টা করা উচিত নয়। তবে কিছু সময় দ্রুত ইন্টারেক্টিভ শেল ব্যবহারের জন্য এটি যথেষ্ট ভাল। মত একটি ফাইল ফাইল গ্লোব
[abc]*
(যা a, b বা c দিয়ে শুরু হওয়া নামের সাথে সমস্ত ফাইলের সাথে মিলবে) প্রথমে "^" অক্ষর সন্নিবেশ করে তুচ্ছ করা যেতে পারে
[^abc]*
আমি মাঝে মাঝে এটি "হারিয়ে যাওয়া + পাওয়া" ডিরেক্টরিটি মিল না করার জন্য ব্যবহার করি, উদাহরণস্বরূপ:
mv /mnt/usbdisk/[^l]* /home/user/stuff/.
অবশ্যই যদি অন্য ফাইলগুলি এল দিয়ে শুরু হয় তবে আমি তাদের পরে প্রক্রিয়া করব।
mv `find Linux/Old '!' -type d | fgrep -v Tux.png` Linux/New
ফাইন্ড কমান্ড সমস্ত নিয়মিত ফাইল তালিকাভুক্ত করে এবং fgrep কমান্ডটি যে কোনও Tux.png ফিল্টার করে। ব্যাকটিকগুলি এমভিকে ফলাফলের ফাইল তালিকাটি সরাতে বলে।
ls ~/Linux/Old/ | grep -v Tux.png | xargs -i {} mv ~/Linux/New/'
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
পরিবর্তে কাজ করে।
এইভাবে গ্রেপ এড়িয়ে যেতে পারে :
ls ~/Linux/Old/ -QI Tux.png | xargs -I{} mv ~/Linux/Old/{} ~/Linux/New/
এটি সহজ এবং মনে রাখা সহজ হতে পারে এবং এটি আমার পক্ষে কাজ করে works
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination