আমি একটি ডিরেক্টরি ট্রিতে সমস্ত চিহ্নগুলি কীভাবে খুঁজে পাব?


253

আমি আমার ওয়েবসাইটের জন্য ডিরেক্টরি গাছের মধ্যে থাকা সমস্ত প্রতিলিপিগুলি সন্ধান করার চেষ্টা করছি। আমি জানি যে আমি এটি করতে ব্যবহার findকরতে পারি তবে কীভাবে ডিরেক্টরিগুলি পুনরাবৃত্তভাবে পরীক্ষা করতে হয় তা আমি বুঝতে পারি না।

আমি এই আদেশটি চেষ্টা করেছি:

find /var/www/ -type l

… এবং পরে আমি আবিষ্কার করেছি যে বিষয়বস্তুগুলি /var/wwwসিমলিংকস, তাই আমি আদেশটি পরিবর্তন করেছি:

find -L /var/www/ -type l

এটি চালাতে কিছুটা সময় নেয়, তবে আমি কোনও মিল পাচ্ছি না।

উপ-ডিরেক্টরিগুলি পরীক্ষা করার জন্য আমি এটি কীভাবে পেতে পারি?

উত্তর:


299

এটি /path/to/folderডিরেক্টরিটিকে পুনরাবৃত্তভাবে অতিক্রম করবে এবং কেবল প্রতীকী লিঙ্কগুলি তালিকাবদ্ধ করবে:

ls -lR /path/to/folder | grep ^l

যদি আপনার উদ্দেশ্য প্রতীকী লিঙ্কগুলিও অনুসরণ করে থাকে findতবে আপনার কমান্ডটি ব্যবহার করা উচিত তবে আপনার -Lবিকল্পটি অন্তর্ভুক্ত করা উচিত ; প্রকৃতপক্ষে findম্যান পেজটি বলেছেন:

   -L     Follow symbolic links.  When find examines or prints information
          about files, the information used shall be taken from the  prop‐
          erties  of  the file to which the link points, not from the link
          itself (unless it is a broken symbolic link or find is unable to
          examine  the file to which the link points).  Use of this option
          implies -noleaf.  If you later use the -P option,  -noleaf  will
          still  be  in  effect.   If -L is in effect and find discovers a
          symbolic link to a subdirectory during its search, the subdirec‐
          tory pointed to by the symbolic link will be searched.

          When the -L option is in effect, the -type predicate will always
          match against the type of the file that a symbolic  link  points
          to rather than the link itself (unless the symbolic link is bro‐
          ken).  Using -L causes the -lname and -ilname predicates  always
          to return false.

তারপরে এটি চেষ্টা করুন:

find -L /var/www/ -type l

এটি সম্ভবত কাজ করবে: আমি findএই হীরাটির ম্যান পেজে পেয়েছি : আপনি যদি -typeবিকল্পটি ব্যবহার করে থাকেন তবে আপনাকে এটি বিকল্পটিতে পরিবর্তন করতে হবে -xtype:

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

তারপর:

find -L /var/www/ -xtype l

1
ধন্যবাদ, এটি সম্ভবত কাজ করবে তবে আমি কেবল লক্ষ্য করেছি যে / var / www / এর বিষয়বস্তু ইতিমধ্যে symlinks এবং এটি those ডিরেক্টরিগুলিতে পুনরাবৃত্তি বলে মনে হচ্ছে না।
হাফিচুক

4
@ হাফিচুক আমার উত্তরে চূড়ান্ত সম্পাদনা দেখুন ( find -L /var/www/ -xtype l)। -xtypeপরিবর্তে ব্যবহার করা -typeআপনার অনুসন্ধানের কৌশলটি করা উচিত। শুভকামনা!
ztank1013

3
আপনি ls -laR /path/to/folder | grep ^lযদি "লুকানো" ডট ফোল্ডারগুলিও প্রক্রিয়া করতে চান তবে তা তৈরি করুন ...
উইমভিডস

2
ধন্যবাদ! তবে এটি কেবল লিঙ্কের নাম দেখায় তবে তাদের অবস্থান নয়।
Kostanos

8
ম্যাক ওএসএক্সে (10.9) -xtypeপাওয়া যায় না। find . -type lমনে হচ্ছে পুনরাবৃত্তির সাথে পরীক্ষা করা হচ্ছে।
অ্যামারতকার

227

একটি আদেশ, পাইপ নেই

find . -type l -ls

ব্যাখ্যা: find বর্তমান ডিরেক্টরি .থেকে -type lকালি সম্পর্কিত সমস্ত তথ্য উল্লেখ করুন এবং -lsসেগুলি বিশদে তালিকাবদ্ধ করুন। মসৃন এবং সাধারণ...

এই উত্তরটি প্রসারিত করে এখানে আরও কয়েকটি প্রতীকী লিঙ্ক সম্পর্কিত findকমান্ড দেওয়া হচ্ছে:

একটি নির্দিষ্ট লক্ষ্য প্রতীকী লিঙ্কগুলি সন্ধান করুন

find . -lname link_target

দ্রষ্টব্য এটি link_targetএমন একটি প্যাটার্ন যাতে ওয়াইল্ডকার্ডের অক্ষর থাকতে পারে।

ভাঙা প্রতীকী লিঙ্কগুলি সন্ধান করুন

find -L . -type l -ls

-Lবিকল্প নির্দেশ findসিম্বলিক লিঙ্ক, যদি না যখন ভাঙা অনুসরণ করুন।

ভাঙ্গা প্রতীকী লিঙ্কগুলি সন্ধান করুন এবং প্রতিস্থাপন করুন

find -L . -type l -delete -exec ln -s new_target {} \;

আরও উদাহরণ খুঁজে

আরও findউদাহরণ এখানে পাওয়া যাবে: https://hamwaves.com/find/


7
আপনি যদি আরও সংক্ষিপ্ত হতে দেখেন তবে এটি উল্লেখ করা উচিত যে বেশিরভাগ সংস্করণের findএকটি -lsবিকল্প রয়েছে। সুতরাং find . -type l -lsউপরের সমতুল্য হওয়া উচিত।
ব্রাটলে

7
এটি গৃহীত উত্তরের উপর উন্নতি করে কারণ এটি আপনাকে নির্দেশ করে যে ডিরেক্টরি গাছটিতে প্রতিলিপিগুলি কোথায় রয়েছে, বিশেষত গুরুত্বপূর্ণ যখন জটিল এবং গভীর গাছের সাথে সিমলিংক হওয়ার সম্ভাবনা রয়েছে তখন কাজ করে important
জেসি ক্রসন

2
আরও ভাল যে প্রশ্নটি আরও ভাল উত্তর হিসাবে গৃহীত হয়েছে।
লর্ড_ড্রাকন

3
এই উত্তর গৃহীত উত্তরটির চেয়ে অনেক বেশি কার্যকর। এছাড়াও, আপনি symlinks কিছু ডিরেক্টরির মধ্যে ফাইলগুলিতে যে বিন্দু খুঁজতে চান যদি: find -lname '*/dir/*' -printf '%P -> %l\n'। এটি উল্লেখযোগ্য যে লিংক_আর্টেজ একটি প্যাটার্ন।
এক্স-ইউরি

1
এটি আমার প্রকারের উত্তর। মসৃন এবং সাধারণ. ধন্যবাদ।
ট্রুথহোল্ডার

11

find ইতিমধ্যে ডিফল্ট দ্বারা পুনরাবৃত্তভাবে দেখায়:

[15:21:53 ~]$ mkdir foo
[15:22:28 ~]$ cd foo
[15:22:31 ~/foo]$ mkdir bar
[15:22:35 ~/foo]$ cd bar
[15:22:36 ~/foo/bar]$ ln -s ../foo abc
[15:22:40 ~/foo/bar]$ cd ..
[15:22:47 ~/foo]$ ln -s foo abc
[15:22:52 ~/foo]$ find ./ -type l
.//abc
.//bar/abc
[15:22:57 ~/foo]$ 

এটি সম্ভবত সেই gotcha এ এক, / var ফাইল / WWW এর সব হয় symlinks। না findডিফল্টরূপে ঐ recurse? আমি অনুমান করছি না;)
হাফিচুক

হ্যাঁ, সম্ভবত লুপিং এড়ানোর জন্য।
jman

আমি -Lকোনও ভাগ্য ছাড়াই পতাকাটি ব্যবহার করার জন্য আপডেট করেছি - কোন অনুমান?
হাফিচুক

নিখুঁত সমাধান এবং এটি লিঙ্কগুলির অবস্থান দেখায়। ধন্যবাদ!
কোস্টানোস

8

কেবলমাত্র প্রতিলিঙ্কগুলি দেখতে, আপনি ব্যবহার করতে পারেন

find -L /path/to/dir/ -xtype l 

আপনি যদি দেখতে চান যে কোন ফাইলগুলি তারা লক্ষ্য করে, কেবল একটি এলএস সংযোজন করুন

find -L /path/to/dir/ -xtype l -exec ls -al {} \;

6

এটি আমি এখনও অবধি খুঁজে পেলাম - আপনাকে বর্তমান ডিরেক্টরিটিতে প্রতীকগুলি দেখায়, পুনরাবৃত্তভাবে, তবে সেগুলি অনুসরণ না করে পুরো পথ এবং অন্যান্য তথ্যের সাথে প্রদর্শিত হয়:

find ./ -type l -print0 | xargs -0 ls -plah

আউটপুটগুলি এর মতো দেখায়:

lrwxrwxrwx 1 apache develop 99 Dec  5 12:49 ./dir/dir2/symlink1 -> /dir3/symlinkTarget
lrwxrwxrwx 1 apache develop 81 Jan 10 14:02 ./dir1/dir2/dir4/symlink2 -> /dir5/whatever/symlink2Target
etc...

0

আমি যা করি তা হ'ল আমার বিন ডিরেক্টরিতে একটি স্ক্রিপ্ট তৈরি করা যা একটি উপনামের মতো। উদাহরণস্বরূপ আমার কাছে lsd ls -l | নামে একটি স্ক্রিপ্ট রয়েছে গ্রেপ ^ ডি

আপনি একটি lsl ls -lR করতে পারেন গ্রেপ ^ l

কেবল তাদের + x chmod করুন এবং আপনি যেতে ভাল।

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