আমি কীভাবে একটি বিশেষ লক্ষ্য সহ সমস্ত প্রতীকী লিঙ্কগুলি সরিয়ে ফেলতে পারি?


43

আদেশ সহ:

ls -la *

আমি আমার সমস্ত প্রতীকী লিঙ্কগুলি তালিকাভুক্ত করতে পারি।

একটি বিশেষ ফোল্ডারের সাথে লিঙ্কযুক্ত সমস্ত প্রতীকী লিঙ্কগুলি কীভাবে আমি সরিয়ে ফেলব?

উদাহরণ স্বরূপ:

আমার ডিরেক্টরিতে usr/local/binআমার নিম্নলিখিত এন্ট্রি রয়েছে:

lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded
lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex
lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara

এখন আমি পথের সাথে সমস্ত লিঙ্ক সরিয়ে ফেলতে চাই /usr/local/texlive/


1
আপনি কি বোঝাতে চেয়েছেন যে কোনও লক্ষ্য ফোল্ডারে লিঙ্কযুক্ত সমস্ত সিমলিংকগুলি মুছে ফেলা হয়? অথবা পাওয়া সমস্ত সিমলিঙ্কগুলিকে একটি নির্দিষ্ট ফোল্ডারে সরান?
জর্জ এম

@ অথার: আমি লিঙ্কগুলি অপসারণ বলতে চাইছি।
মার্কো ড্যানিয়েল

উত্তর:


63

বিকল্প উত্তরটি পড়তে ভুলবেন না দয়া করে । এটি আরও বেশি যদিও এই মুহুর্তে উচ্চ হিসাবে ভোট দেওয়া হয়নি।

আপনি সমস্ত প্রতীকী লিঙ্কগুলি মুছতে এটি ব্যবহার করতে পারেন:

find -type l -delete

আধুনিক findসংস্করণ সহ।

পুরানো সংস্করণগুলিতে এটি হতে পারে:

find -type l -exec rm {} \;
# or
find -type l -exec unlink {} \;

নির্দিষ্ট লিঙ্ক লক্ষ্য সীমাবদ্ধ করতে, ধরে নিই যে কোনও পাথের মধ্যে কোনও নতুন লাইন অক্ষর নেই:

 find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done

বা সুন্দর বিন্যাসিত

 find -type l |
 while IFS= read -r lnkname;
 do
   if [ "$(readlink '$lnkname')" = "/your/exact/path" ];
   then
     rm -- "$lnkname"
   fi
 done

ifঅবশ্যই যেমন সঙ্গে নকশার সাথে মেলে এমন একটি আরো জটিল অবস্থায় অন্তর্ভুক্ত হতে পারে grep


আপনার ক্ষেত্রে তৈরি:

find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q '^/usr/local/texlive/'); then rm "$lnk"; fi; done

বা সুন্দর বিন্যাসিত:

find -type l | while IFS= read -r lnk
do
  if readlink "$lnk" | grep -q '^/usr/local/texlive/'
  then
    rm "$lnk"
  fi
done

এই আদেশটি কি সমস্ত প্রতীককে সরিয়ে দেয়? দয়া করে উপরে আমার সম্পাদনাটি দেখুন ..
মার্কো ড্যানিয়েল

@ মার্কো: হ্যাঁ, প্রথম তিনটি লাইন হবে। আরও সম্পাদনা করা হচ্ছে :)
0xC0000022L

কমান্ডের -printশেষে আমি findকিছু ভিজ্যুয়াল প্রতিক্রিয়া জানাতে চাই।
রানলেভেল 0

30

একটি আধুনিক findযা সমর্থন করে -lname:

find /usr/local/bin -lname '/usr/local/texlive/*' -delete

এটা করা উচিত।


1
এটি একটি দুর্দান্ত এবং সাধারণ সমাধান। আমি পরীক্ষা করেছি এবং এটি কবজির মতো কাজ করে। ধন্যবাদ
মার্কো ড্যানিয়েল

সম্ভবত এটি হওয়া উচিতfind /usr/local/bin
জেমস ইয়ংম্যান 25'12

1
অগত্যা আধুনিকও নয়। জিএনইউ আমার এটি রক্ষণ করার চেয়ে বেশি সময় ধরে findছিল -lname(২০০৩ সাল থেকে)।
জেমস ইয়ংম্যান

@ জেমস ইয়ংম্যান: ধন্যবাদ! আধুনিক দ্বারা findআমি সত্যিই জিএনইউ বোঝায় find। ;) আমি ব্যবহার করেছি usr/local/bin, কারণ ওপি এটিই ব্যবহার করেছিল।
ক্রিস্টোফার হামারস্ট্রিম

5

findসমাধান মহান।

আপনার অনুসন্ধানটি সমর্থন না করে এমন ক্ষেত্রে -lname, এখানে অন্য উপায় যা কেবল শেল এবং ব্যবহার করে readlink

cd /usr/local/bin
for f in *; do
  case "$(readlink "$f")" in /usr/local/texlive/*)
    rm "$f"
    ;;
  esac
done

1

সাথে zsh:

rm -f /usr/local/bin(@e'{[[ $REPLY:P = /usr/local/texlive/* ]]}')

$REPLY:Pসম্পূর্ণরূপে একটি সিমলিংক-মুক্তের পথটি সমাধান করে, সুতরাং ধরে /usr/local/texliveনেওয়া সিমলিংক নিজেই মুক্ত, এটি সমস্ত ফাইল সরিয়ে ফেলবে যা সিমলিংক রেজোলিউশনের পরে লাইভের /usr/local/textliveসাথে লিঙ্কগুলি অন্তর্ভুক্ত করবে /usr/local/texlive/fooতবে এতে ../texlive/barবা এর সাথে /usr/./local/texlive/whateverবা /some/other/symlinkযা নিজেই একটি সিমলিংক নির্দেশ করছে /usr/local/texlive, ইত্যাদি, ।


0

আপনার পথে যান এবং নিজেকে পথের কনফিগারেশন সেট করুন

ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf

যেহেতু এইগুলি usr/local/binসেই মতো পথগুলি grepঅনুসন্ধান করছে, grep -Eতা হ'ল উপায়। অন্যথায় কোনও মিল নেই would এছাড়াও hমধ্যে lsযে কোন উদ্দেশ্যের এখানে পরিবেশন করা নেই -h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)। আরও দেখুন man lsবাman grep
ss_iwe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.