একটি সম্পূর্ণ ডিরেক্টরি অনুলিপি করতে ইনস্টল কমান্ডে সমস্যা


16

সুতরাং আমার কিছু কনফিগার ফাইলের সাথে আমার একটি রেপো রয়েছে এবং আমি makefileসেগুলি হোমডিরে ইনস্টল করার জন্য একটি তৈরির চেষ্টা করছি । আমার সমস্যাটি হ'ল আমি যখন নীচের কমান্ডটি সরাসরি ব্যাশে চালাই

install -m 755 -d ~/path/to/dotfilesDir/ ~/

আপাতদৃষ্টিতে কিছুই ঘটে যখন

install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/

উদ্দেশ্য হিসাবে কাজ করে।

প্রথম (সহজ এবং পরিষ্কার) সমাধান কেন কাজ করে না?



আমি সবেমাত্র -r এর সাথে সিপি ব্যবহার করেছি। সিপির মতো -R বিকল্প কেন ইনস্টল করবেন না তা আমি সত্যিই বুঝতে পারি না।
ইব্রাহিম

উত্তর:


7

ম্যান পৃষ্ঠাটি একবার দেখে মনে হচ্ছে এটি installআপনার যা ইচ্ছা তা করবে না।

প্রকৃতপক্ষে, সংশ্লেষ বিভাগটি ফর্মটির ব্যবহারকে ইঙ্গিত করে:

install [OPTION]... -d DIRECTORY...

এবং পরে, ম্যান পেজটি বলে:

-d, -
ডিরেক্টরি সমস্ত আর্গুমেন্টকে ডিরেক্টরি হিসাবে চিহ্নিত করে; নির্দিষ্ট ডিরেক্টরিগুলির সমস্ত উপাদান তৈরি করুন

সুতরাং এটি আমার কাছে মনে হয় যে এই বিকল্পটির বিন্দুটি একটি জটিল (তবে খালি) ডিরেক্টরি কাঠামো-লা ইনস্টল করতে সক্ষম হবে mkdir -p ...

আপনি একটি লুপ দিয়ে যা করতে চান তা সম্পাদন করতে পারেন:

for file in /path/to/DotFiles/dir/*;do
    install -m 755 "$file" ~/
done

বা, যদি এর অধীনে অনেকগুলি স্তর থাকে তবে /path/to/DotFiles/dirআপনি ব্যবহার করতে পারেন find:

find /path/to/DotFiles/dir/ -type f -exec 'install -m 755 "{}" ~/' +

নির্দিষ্ট ডিরেক্টরিগুলির সমস্ত উপাদান তৈরি করুন = সাবডিয়ারগুলি তৈরি করুন তবে ফাইলগুলি নয়?
নাথডউইক

@নাথডউইক রাইট আপনি আপনার হোম ডিরেক্টরি ব্যবহার করে এইভাবে একটি জটিল (কঙ্কাল) ডিরেক্টরি কাঠামো তৈরি করতে পারেনinstall -m 755 -d ~/foo/bar/baz
জোসেফ আর।

1
-exec 'install -m 755 "{}" ~/' +কাজ করছে না, কমপক্ষে কিছু লিনাক্সের (সমস্ত? সবচেয়ে?) সংস্করণে নয়। ওএসএক্স বা কিছুতে কাজ করতে পারে। এই জাতীয় ব্যবহারটি যদি আপনি অনলাইনার চান তবে খুব সোজা এগিয়ে চলেছেন: ১. ডিরেক্টরিগুলি পুনরাবৃত্ত করুন: for d in $(find . -type d); do install -d --mode 755 "$d" "../install-test/$d"; done২. ফাইলগুলি পুনরাবৃত্ত করুন:for f in $(find . -type f); do install -D --mode 644 "$f" ../install-test/; done
জোশ এম

6

@ জোসেফ আর. এর উত্তর থেকে শুরু করে, এটি অনুসন্ধানের সাথে কাজ করার জন্য এটিই আমার সমাধান, কারণ আমি তাঁর আদেশটি কাজ করতে পারি নি। (আমি মনে করি না যে এটি প্রয়োগ হয়েছে, কারণ নিয়মগুলি প্রয়োগ করার কারণে \+: {}উপাদানটির পরে কিছুই হতে পারে না )) (আমি মন্তব্য করতে পারিনি This এই পুরো অনুচ্ছেদটি আসলে মুছে ফেলা যেতে পারে))

সমস্ত ফাইলগুলি একই একই ডিরেক্টরিতে অনুলিপি করতে (এখানে target/directory):

find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;

-D এখানে বাধ্যতামূলক নয়, এটি কেবলমাত্র লক্ষ্যে অ-বিদ্যমান ডিরেক্টরি তৈরি করবে।

আপনি বর্তমানে যেখানে থেকে শুরু করে একটি সম্পূর্ণ ডিরেক্টরি শ্রেণিবিন্যাস এবং এর ফাইলগুলি (এটি খালি ডিরেক্টরি বাদ দেবে) অনুলিপি করতে:

find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;

হিসাবে বলেন, এই গাছ থেকে শুরু পুনঃ হবে $PWD। এছাড়াও, যদি আপনি খালি ডিরেক্টরি কপি করা আবশ্যক, উপর একটি উপায় ব্যবহার খুঁজে পাইনি -type dএর findএবং install -d

সুতরাং, গাছটি অনুলিপি করতে, এমন কোনও ডিরেক্টরি থেকে শুরু করে যা $PWD:

(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)

কীভাবে parent/directoryঅনুলিপি করা হচ্ছে তা লক্ষ্য করুন ।

অতিরিক্ত

যারা ব্যবহার করছেন তাদের জন্য shell/fishএখানে লাইনটি একই কাজ করে:

fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.