কিছু ফাইল কপি করবেন, তবে সব ফাইলই নয়?


54

সুতরাং, আপনি *যখন cpকোনও ডিরেক্টরি প্রসঙ্গে ব্যবহার করতে পারেন তখন সমস্ত ফাইলের জন্য ওয়াইল্ড কার্ড হিসাবে এটি ব্যবহার করতে পারেন । ফাইল ছাড়া সব ফাইল অনুলিপি করার উপায় আছে x?

উত্তর:


42

ইন bashআপনি ব্যবহার করতে পারেন extglob:

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

যেখানে !(b*)সমস্ত b*ফাইল বাদ দিন ।

আপনি পরে নিষ্ক্রিয় করতে পারেন extglobসঙ্গে

 $ shopt -u extglob

আপনি কি জানেন যে টিসিএস শেলের সমতুল্য কিছু আছে কিনা?
লেভন

দুর্ভাগ্যক্রমে আমি না। মত মনে হয় findযে একমাত্র উপায় tcsh:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+
নলখাগড়া

50

Rsync এটিকে সুন্দরভাবে পরিচালনা করে।

উদাহরণ সমস্ত কপি: rsync -aP /folder1/* /folder/2

বর্জন সহ সমস্ত অনুলিপি উদাহরণ: rsync -aP --exclude=x /folder1/* /folder2/

-aPসুইচ:

a: অনুরূপ cp -a, পুনরাবৃত্ত হওয়া ইত্যাদি P


5
এবং সাধারণ rsync বর্জন তালিকার সংক্ষিপ্ত গাইডের জন্য এই উত্তরটি দেখুন ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
ডারউইন / ম্যাকোজে, আপনি পুনরাবৃত্তি করতে চান তার -rPপরিবর্তে ব্যবহার করুন -aP-aসংরক্ষণাগার জন্য। এটি পরিবর্তন হয়েছে কিনা তা নিশ্চিত নয় বা MacOS এ এটি অন্যরকম কিনা।
jpoveda

rsyncএটি পুনরাবৃত্তি করার বিকল্প আছে। উদাহরণ: rsync --recursive -P --exclude=x /folder1/* /folder2/। (কেবল উবুন্টুতে পরীক্ষিত)
n1k31t4

12

এটি কোনও বৈশিষ্ট্য নয় cp, এটি আপনার শেলের একটি বৈশিষ্ট্য (এটি *সমস্ত নন-ডট ফাইল বোঝাতে প্রসারিত হয় ), সুতরাং উত্তরটি আপনি কোন শেলটি ব্যবহার করছেন তার উপর নির্ভর করে। উদাহরণস্বরূপ, zshএই বাক্য গঠনটি সমর্থন করে:

$ cp ^x /path/to/destination

কোথায় ^xমানে "ছাড়া সমস্ত ফাইল x"

আপনি নির্বাচন এবং ডি-সিলেকশন নিদর্শনগুলিও একত্রিত করতে পারেন, উদাহরণস্বরূপ xyz থাকা ব্যতীত সমস্ত ওয়াভ ফাইলগুলি অনুলিপি করতে, আপনি ব্যবহার করতে পারেন:

cp *.wav~*xyz*

কোন মন্তব্য bash?
চাদ হ্যারিসন

@ হাইড্রোপারাডেস আমি বাশ সম্পর্কে খুব বেশি কিছু জানি না তবে এই উত্তরটি এটিকে আবৃত করে বলে মনে হচ্ছে
মাইকেল মরোজেক

টিসিএসের কী হবে? কেউ জানেন?
লেভন

4

উন্নত শেল গ্লোব্বিং বা বিল্ট-ইন-বর্জন বিকল্পগুলির সাথে কমান্ডগুলি ব্যবহারের চেয়ে স্ট্যান্ডল ওল্ড (পোর্টেবল / সামঞ্জস্যপূর্ণ) বোর্ন শেলকে স্ট্যান্ডার্ড সরঞ্জামগুলির সাথে অনেক কম মার্জিত উপায়ে ব্যবহার করা যেতে পারে।

যদি খুব বেশি ফাইল না থাকে (এবং শূন্যস্থান এবং / অথবা লাইন ব্রেকগুলি সহ নামগুলি না থাকে), এটি একটি উপায় হতে পারে:

cp `ls | egrep -v '^excludename$'` destdir/.

অবশ্যই, bashএবং জিএনইউ সরঞ্জামগুলি দুর্দান্ত এবং শক্তিশালী, তবে সেগুলি এখনও সর্বদা পাওয়া যায় না। যদি আপনি এটি কোনও পোর্টেবল স্ক্রিপ্টে রাখার ইচ্ছা করেন তবে আমি findরাশ এর মন্তব্যে সুপারিশ করব ।


2
আমি দেখতে পেয়েছি যে আপনার উত্তরের শেষ অংশটি কেবল হাতের বিষয় থেকে দূরে রয়েছে। তদ্ব্যতীত, "ইউনিক্স" আর সোনার মান নয় (যদি এটি কখনও হয়)। এই সাইটের শিরোনাম "ইউনিক্স এবং লিনাক্স" হওয়া সত্ত্বেও কিছু "ইউনিক্স" বা আর কিছু না হলে এটি কেবল প্রাসঙ্গিক নয়।
আলেকজান্ডার

2
ঠিক আছে. আমি পরিবর্তে মন্তব্যটি এখানে সরিয়ে নিয়েছি: ইউনিক্স জিএনইউ নয়। আমি সম্মত হই যে জিনিসের "অভিন্নতা" খুব আকর্ষণীয় নয় তবে আমি এখনও বহনযোগ্যতা এবং আপনার ইতিহাস সম্পর্কে কিছুটা জানার ক্ষেত্রে বিশ্বাস করি।
ম্যাটবিয়ানকো

সেখানে আপনার সাথে পুরোপুরি একমত।
আলেকজান্ডার

2

যদি আপনি কোনও ফোল্ডারে (সাবফোল্ডার সহ) সমস্ত কিছু একটি নির্দিষ্ট উপ-ডিরেক্টরিতে অনুলিপি করতে চান:

cp -R $(ls | grep -v '^subdir$') subdir/

Sh, bash, zsh (কমপক্ষে) দিয়ে কাজ করে।


1
আমাকে বিশ্বাস করুন এটি একই উদ্দেশ্য নয়cp -R * subdir/
রোয়াইমা

1
আপনি যদি এই কমান্ডটি "সিপি -আর * সাবডির /" ব্যবহার করেন, বাশ / জ্যাশ 'সাবডির' পুনরুক্তভাবে অনুলিপি করার চেষ্টা করেছিল। আপনি একটি ত্রুটি দিয়ে শেষ করেছেন: "নামটি খুব দীর্ঘ (অনুলিপি করা হয়নি)"।
ব্যবহারকারী2707671

ভাল যুক্তি. আপনার পরামর্শটি " " cpথেকে bash/ থেকে নয় sh" cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’" থেকে সতর্কতা এড়ানোর চেষ্টা করে । যদিও অনুলিপিটি সঠিকভাবে সম্পূর্ণ হয়। দুর্ভাগ্যক্রমে আপনার রূপটি কোনও স্থান বা শেল-সংবেদনশীল বিরামচিহ্নযুক্ত কোনও ফাইলের সাথে বিরতি। দেখুন unix.stackexchange.com/q/128985/135943
roaima

-1

extglob আমার মনে হয় এখন পর্যন্ত সবচেয়ে ভাল উপায়।

আরেকটি উপায় ব্যবহার করা হয় cp $(ls --ignore=x) subdir/


এটি ফাইলের নামগুলিতে যে কোনও বিশেষ অক্ষরের দেওয়া ভঙ্গ করবে। (স্পেসস, নিউলাইনস, $ইত্যাদি) এর আউটপুটটিকে কখনই পার্স করবেন না lsunix.stackexchange.com/q/128985/135943
ওয়াইল্ডকার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.