আমি যদি সমস্ত *.so
ফাইলগুলি অনুলিপি src
করতে dst
চাইতাম তবে:
cp src/*.so dst
যাইহোক, আমি সব অনুলিপি করতে চান *.so
src থেকে ফাইল এবং এটা subdirs মধ্যে dst
। কোন সংকেত সনাক্ত করুন?
আমি যদি সমস্ত *.so
ফাইলগুলি অনুলিপি src
করতে dst
চাইতাম তবে:
cp src/*.so dst
যাইহোক, আমি সব অনুলিপি করতে চান *.so
src থেকে ফাইল এবং এটা subdirs মধ্যে dst
। কোন সংকেত সনাক্ত করুন?
উত্তর:
চেষ্টা করুন:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
grep
ব্যবহৃত সাধারণ শেল প্যাটার্নের তুলনায় প্যাটার্নের মিলের ক্ষমতাও অনেক বেশি । পরামিতি থেকেও অনেক বেশি শক্তিশালী । -name
find
xargs
-exec
find
আপনি যদি ব্যাশ ব্যবহার করছেন তবে ফাইল এবং ডিরেক্টরিগুলি পুনরাবৃত্তভাবে মেলানোর জন্য আপনি globstar
শেল বিকল্পটি চালু করতে পারেন :
shopt -s globstar
cp src/**/*.so dst
আপনার নামগুলির সাথে শুরু হওয়া .
ফাইলগুলি এবং / অথবা ডিরেক্টরিগুলির মধ্যে এবং এর অধীনে ফাইলগুলির নামগুলি শুরু করা উচিত .
, dotglob
অপশনটিও (যেমন, সহ shopt -s dotglob
) সেট করুন । আপনি উভয়কে একটি কমান্ডে সেট করতে পারেন:
shopt -s globstar dotglob
আমি মাইক দ্বারা প্রস্তাবিত আদেশটি চেষ্টা করেছিলাম:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
তবে এটি সমস্ত ফাইলকে dst
তাদের আপেক্ষিক পথগুলি হারিয়ে ডিরেক্টরিতে ফেলে ফেলা হয়েছে।
আপেক্ষিক পথ ধরে রাখতে কমান্ডটি এটিকে সংশোধন করতে হবে:
find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
dst
। যদি তা না হয় তবে ব্যবহার করুন cp --parents
। এছাড়াও, ফাইলের নামগুলি উদ্ধৃত করতে ভুলবেন না। সুতরাং: ... | xargs -i cp --parents "{}" dst
(নোট করুন যে শেষ আর্গুমেন্টটি cp
এখন "গন্তব্য ডিরেক্টরি" just কমান্ড এমনকি খাটো (এবং সম্ভবত আরও দ্রুত) তৈরি করা যেতে পারে ব্যবহার -t
পতাকা: ... | xargs cp --parents -t dst
।
... | xargs cp {} --parents -t dst.
এটি করার আরেকটি উপায় হ'ল:
find src/ -type f -name "*.so" -exec cp {} dst/ \;
cp
প্রসেস: ... -exec cp -t dst/ {} +
।
-exec
হন ;
, {}
একবারে একটি পাথ দ্বারা প্রতিস্থাপিত হয়। আপনি cp
প্রতিটি ফাইলের জন্য পৃথক পাবেন । সঙ্গে +
সিনট্যাক্স find
প্রতিস্থাপিত {}
একাধিক ফলাফল সঙ্গে (কমান্ড লাইন দৈর্ঘ্য একটি সিস্টেম-সংজ্ঞায়িত সীমা পর্যন্ত; সীমাবদ্ধতা: {}
সামনে শেষ জিনিস হতে হবে +
, অত cp -t
)। একটি প্রক্রিয়া তৈরি এবং সমাপ্তি তুলনামূলকভাবে ব্যয়বহুল জিনিস। এই কারণে +
আপনি যখন প্রচুর ফলাফল আশা করেন এটি ব্যবহার করা ভাল । এক্ষেত্রে প্রচুর ফাইল অনুলিপি করা হতে পারে যেভাবেই হোক অনেক বেশি সময় লাগতে পারে যাতে পার্থক্যটি নজরে না যায়; তবুও এটি একটি ভাল অনুশীলন।
গ্রেডটি ফাইন্ড- এর নাম ব্যবহার করে প্রতিস্থাপন করা যেতে পারে :
find src/ -type f -name "*.so" | xargs -i cp {} dst/{}
find
প্যাটার্ন মিল এবং কমান্ড কার্যকর করতে পারে। পাইপ করার কোন প্রয়োজন নেই তার আউটপুট:find src/ -type f -name '*.so' -exec cp '{}' dst/ ';'