linux - কিভাবে একটি নির্দিষ্ট ডিরেক্টরি বাদ দিতে 'সিপি' কমান্ড ব্যবহার করবেন?




cp (12)

rsync

rsync -r --verbose --exclude 'exclude_pattern' ./* /to/where/

এবং কপি করা যাচ্ছে কি দেখতে প্রথম বিকল্পটি দিয়ে চেষ্টা করুন

আমি একটি নির্দিষ্ট উপ-ডিরেক্টরির মধ্যে কিছু ফাইল ছাড়া একটি ডিরেক্টরি মধ্যে সব ফাইল অনুলিপি করতে চান। আমি লক্ষ্য করেছি যে 'cp' কমান্ডের মধ্যে একটি ব্যতিক্রম নেই। সুতরাং, আমি কিভাবে এই অর্জন করতে পারি?


rsync দ্রুত এবং সহজ:

rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude

আপনি ব্যবহার করতে পারেন - --exclude বার।

এছাড়াও আপনি -n চালনার জন্য add- -n ব্যবহার করতে পারেন যা বাস্তব ক্রিয়াকলাপ সম্পাদন করার আগে কপি করা হবে তা দেখতে এবং যদি সবকিছু ঠিক থাকে তবে কমান্ড লাইন থেকে সরান।


আপনি যখন করতে পারেন rsync কেন ব্যবহার করুন:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

এই লক্ষ্য ডিরেক্টরি গঠন উৎস হিসাবে একই হচ্ছে অনুমান।


আপনি যে সমস্ত ফাইল এবং ডিরেক্টরিগুলি সরাতে চান তা খুঁজে -prune করতে -prune সাহায্যে একটি উপায় find -0 বের করতে হবে, তারপর প্রতিটিকে কপি করার জন্য xargs -0 ব্যবহার করুন।


আমি কমান্ডের আউটপুটটি পড়তে একটি "do while" লুপ ব্যবহার করি। এই উদাহরণে, আমি নির্দিষ্ট প্যাটার্নগুলির সাথে মেলামেশা করছি (পরিবর্তে বাদ দেওয়ার) যেহেতু আমার চেয়ে বেশি সংখ্যক প্যাটার্ন মিল রয়েছে যা আমি চাই না। আপনি একই সাথে ফ্ল্যাগ বিপরীত করতে পারেন -নাম ফ্ল্যাগগুলির সামনে নয়:

    find . -type f -iname "*.flac" -o -print0 -iname "*.mp3" -print0 -o -iname "*.wav" -print0 -o -iname "*.aac" -print0 -o -iname "*.wma" -print0 | while read -d $'\0' file; do cp -ruv "$file" "/media/wd/network_sync/music/$file"; done

আমি যে সমস্ত মিউজিক টাইপ ফাইলগুলি আমার সার্ভারে নতুন, ওয়েস্টার্ন ডিজিটাল টিভি লাইভ হাবের ফাইলগুলির চেয়ে নতুন যা আমি / মিডিয়া / wd এ মাউন্ট করেছি তার চেয়ে অনুলিপি করার জন্য উপরে ব্যবহার করি। আমি উপরে ব্যবহার করি কারণ আমার অনেকগুলি ডিভিডি ফাইল, এমপিএস ইত্যাদি রয়েছে যা আমি বাদ দিতে চাই এবং কারণ কোন কারণে rsync এটি অনুলিপি করছে বলে মনে হচ্ছে তবে আমি wd ডিভাইসটি দেখি তবে ফাইলগুলি সত্ত্বেও সেখানে নেই এই কমান্ডের সাথে rsync সময় ত্রুটি:

    rsync -av --progress --exclude=*.VOB --exclude=*.avi --exclude=*.mkv --exclude=*.ts --exclude=*.mpg --exclude=*.iso --exclude=*ar --exclude=*.vob --exclude=*.BUP --exclude=*.cdi --exclude=*.ISO --exclude=*.shn --exclude=*.MPG --exclude=*.AVI --exclude=*.DAT --exclude=*.img --exclude=*.nrg --exclude=*.cdr --exclude=*.bin --exclude=*.MOV --exclude=*.goutputs* --exclude=*.flv --exclude=*.mov --exclude=*.m2ts --exclude=*.cdg --exclude=*.IFO --exclude=*.asf --exclude=*.ite /media/2TB\ Data/data/music/* /media/wd/network_sync/music/

আমি খুঁজে পাওয়া সবচেয়ে সহজ উপায়, যেখানে আপনি ফাইলগুলি এবং ফোল্ডারগুলিকে বাদে তাদের নামগুলি জুড়ে কেবলমাত্র সমস্ত ফাইল অনুলিপি করতে পারেন:

shopt -s extglob
cp -r !(Filename1 | FoldernameX | Filename2) Dest/

এটা উৎস ডিরেক্টরির এর আপেক্ষিক।
এই কপি করা থেকে ডিরেক্টরি source/.git বাদ দিতে হবে।

rsync -r --exclude '.git' source target

এটি লিনুস ক্লেনের উত্তরগুলির একটি সংশোধন। তার উত্তর আমার জন্য কাজ করবে না কারণ একটি হবে। ফাইল পাথের সামনে যোগ করা হয়েছে যা সিপি পছন্দ করে না (পথটি উৎস / ডাইস্টিনেশন / ফাইলের মতো দেখাবে)।

এই কমান্ডটি আমার জন্য কাজ করেছে:

find . -type f -not -path '*/exlude-path/*' -exec cp --parents '{}' '/destination/' \;

--parents কমান্ড ডিরেক্টরি গঠন সংরক্ষণ করে।


rsync আসলে বেশ চতুর। এটি কাজ করতে একাধিক পরীক্ষা করতে হবে।

ধরুন আপনি /var/www/html /var/www/dev তে কপি করতে চান তবে তার আকারের কারণে /var/www/html/site/video/ ডিরেক্টরিটি বাদ দিতে হবে। কমান্ড হবে:

rsync -av --exclude 'sites/video' /var/www/html/ /var/www/dev

কিছু সতর্কতা :

  1. শেষ স্ল্যাশ / উত্সের প্রয়োজন হয়, নাহলে এটি তার সামগ্রীর পরিবর্তে উৎস ডিরেক্টরিটি অনুলিপি করবে এবং /var/www/dev/html/xxxx , যা আপনি যা চান তা নয়।
  2. - --exclude পথ সরাসরি উৎস সম্পর্কিত। এমনকি যদি আপনি সম্পূর্ণ পরম পথ রাখা, এটা কাজ করবে না।

  3. -v verbose জন্য, -a আর্কাইভ মোড জন্য যার অর্থ আপনি recursion চান এবং প্রায় সবকিছু সংরক্ষণ করতে চান।


এমভিডস এর মন্তব্য সম্প্রসারিত, এই আমার জন্য কাজ করে

cd dotfiles
tar -c --exclude .git --exclude README . | tar -x -C ~/dotfiles2

cp -rv `ls -A | grep -vE "dirToExclude|targetDir"` targetDir

সম্পাদনা: পাশাপাশি লক্ষ্য পথ বাদ দিতে ভুলবেন না (অন্যথায় এটি পুনরাবৃত্তি কপি হবে)।


mv tobecopied/tobeexcluded .
cp -r tobecopied dest/
mv tobeexcluded tobecopied/




cp