একটি ডিরেক্টরিতে সমস্ত ফাইলের (ফাইলের শ্রেণি) প্রতীকী লিঙ্কগুলি কীভাবে তৈরি করবেন?


43

আমি একটি নির্দিষ্ট ডিরেক্টরিতে ln -sসমস্ত ফাইলের (বা ফাইলগুলির একটি শ্রেণীর উদাহরণস্বরূপ শেষ হওয়া) প্রতীকী লিঙ্কগুলি তৈরি করতে চাই .bar। বলুন আমি সিডব্লিউডে আছি এবং টাইপ ls ../source/*.barআমাকে দেয়

foo.bar
baz.bar

আমি কীভাবে প্যারামিটার তালিকাটি পাস করতে পারি ln -sএটি শেষ পর্যন্ত সমাধান হয়

ln -s ../source/foo.bar
ln -s ../source/baz.bar

অবশ্যই আমি জানি আমি বাশ স্ক্রিপ্ট লিখতে পারি, তবে এর সাথে জড়িত কিছু সহজ হওয়া উচিত xargsবা তাই এটি সাধারণ কাজ বলে মনে হয় - কমপক্ষে আমার পক্ষে।

উত্তর:


75

ln একাধিক যুক্তি গ্রহণ করে তবে সে ক্ষেত্রে একটি লক্ষ্য ডিরেক্টরি দিতে ভুলবেন না।

সুতরাং, আপনার উদাহরণে .লক্ষ্য ডিরেক্টরি, তাই এটি হিসাবে সহজ হওয়া উচিত

ln -s ../source/*.bar .

থেকে man ln; উপরের কমান্ডটি 3 য় ফর্ম ব্যবহার করে:

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
  • 1 ম ফর্মটিতে, LINK_NAME নামের সাথে TARGET এ একটি লিঙ্ক তৈরি করুন।
  • ২ য় ফর্মটিতে বর্তমান ডিরেক্টরিতে TARGET- এ একটি লিঙ্ক তৈরি করুন।
  • তৃতীয় এবং চতুর্থ ফর্মগুলিতে, প্রতিটি টার্গেটের লিঙ্কগুলি DIRECTORY এ তৈরি করুন।

5
আপনি কেবলমাত্র আমার জীবনের 5 টি দৃ minutes় মিনিট সংরক্ষণ করেছেন, তাদের মধ্যে একটিতে মন্তব্য করার জন্য যথেষ্ট। :-)
মুডবুম

কোনও ফাইল না থাকলে এটি কাজ করে না *.bar। এটি নামের সাথে একটি লিঙ্ক তৈরি করবে "*.bar", যা আপনি চান তা নয়।
নিমরোড

1
@Nimrod: তা সত্য, কিন্তু আপনি বলতে পারেন ব্যাশ আপনি এটি মাধ্যমে পরিবর্তে একটি ত্রুটি প্রতিবেদন করতে চান shopt -s failglob; যেমন দেখতে unix.stackexchange.com/a/216227/33390 (মধ্যে সমতুল্য zsh হয় setopt nomatch, যা ডিফল্টভাবে করা থাকে)
mpy

: তালি: সুন্দর!
ক্রিস স্মিটজ

3

ব্যবহার find

certainDir="/path/to/dir"
find -name "*.bar" -exec ln -s {} "$certainDir" \;

এছাড়াও, সিমলিংক সহ পুরো পাথ (যেখানে সম্ভব) ব্যবহার করতে ভুলবেন না ।


2
ধন্যবাদ, তবে তাই না find $certainDir -name "*.bar" -exec ln -s {} \;? এবং কেন আমি পুরো পথ ব্যবহার করব? আমি এটি জানার পক্ষে যথেষ্ট সুবিধাজনক বলে মনে করি যে আমি যখন উইচ-এর চারপাশে একটি ডিরেক্টরি গাছকে স্থানান্তর করি তখন লিঙ্কগুলি অক্ষত থাকে।
দস্তরোবু

এটি নির্ভর করে যেখানে আপনি ডিরেক্টরিগুলি সিমলিংক করতে চান। এবং আমি মনে করতে পারি না কেন পুরো পাথগুলি একটি ভাল ধারণা, এটি হার্ড লিঙ্কগুলির জন্য হতে পারে তবে আমি একটি কারণের জন্য আমার মনে তা পোড়া করেছি। হুম।
সবেমাত্র ব্রাউজিং

ধন্যবাদ, আপনার উত্তর দুর্দান্ত। এমপির উত্তর যেহেতু প্রশ্নের সহজ সমাধান তাই পয়েন্টটি তার কাছে যায়। আমি উভয় উত্তর গ্রহণ করতে পারে, যদি আমি করতে পারেন।
dastrobu

3

আপনি গ্লোবস্টার (বাশ / zsh এর দ্বারা নির্ধারিত:) ব্যবহার করে পুনরুক্তি চেষ্টা করতে পারেন shopt -s globstar:

ls -vs ../**/*.bar .

দ্রষ্টব্য: ভার্বোজের -vজন্য যুক্ত করা হয়েছে।

অথবা যদি তালিকাটি দীর্ঘ হয় তবে findইউটিলিটি ব্যবহার করে :

find .. -name \*.bar -exec ln -vs "{}" dest/ ';'

এটি লিঙ্কগুলি তৈরি করবে dest/বা এটি .বর্তমান ফোল্ডারের জন্য পরিবর্তন করবে ।


দ্বিতীয়টি হ'ল সঠিক উত্তর।
নিমরোড

0

cp-sবিকল্প সহ একটি নরম লিঙ্ক তৈরি করতে পারে (বা -lহার্ড লিঙ্কগুলির জন্য)।

বর্তমান ডিরেক্টরি থেকে এইভাবে ব্যবহার করা যেতে পারে:

$ cp -s ../path/with/scripts/* .

আপনার ক্ষেত্রে এটি এমন হবে:

$ cp -s ../source/*.bar .
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.