ابحث عن ملف بالاسم باستخدام سطر الأوامر

أود تحديد موقع ملف باستخدام سطر الأوامر. لقد حاولت:

find . -type f -name "postgis-2.0.0"

و

locate postgis-2.0.0

ولكن دون جدوى. ما هو الأمر لتحديد دليل الملف, قدمت اسمها?

حاول find ~/ -type f -name "postgis-2.0.0" بدلا من ذلك.

باستخدام . سوف ابحث فقط في الدليل الحالي. ~/ سيتم البحث في الدليل الرئيسي بأكمله (على الأرجح حيث قمت بتنزيله إلى). إذا كنت تستخدم wget كجذر ، من الممكن أن يكون في مكان آخر حتى تتمكن من استخدام / للبحث في نظام الملفات بأكمله.

جودلاك

سأحاول:

sudo find / -type d -name "postgis-2.0.0"

ال . يعني البحث فقط في الدليل الحالي، فمن الأفضل للبحث عن كل شيء من الجذر إذا كنت حقا لا أعرف. أيضا ، نوع و يعني البحث عن الملفات ، وليس المجلدات. مضيفا sudo يسمح لها بالبحث في جميع المجلدات / المجلدات الفرعية.

بناء الجملة الخاص بك ل locate صحيح ، ولكن قد تضطر إلى تشغيل

sudo updatedb

أولا. لاي سبب كان, أنا لم يكن لديك حظا سعيدا مع locate رغم ذلك.

locate يستخدم قاعدة بيانات الملفات والدلائل التي أدلى بها updatedb. حتى إذا قمت بتحميل ملف جديد هناك فرصة أكبر أن الخاص بك updatedb لم يتم تحديث قاعدة بيانات الملفات والدلائل. يمكنك استخدام sudo updatedb قبل استخدام locate برنامج فائدة.updatedb يعمل عموما مرة واحدة في اليوم في حد ذاته على أنظمة لينكس.

الإجابات الأخرى جيدة ، ولكن أجد حذف Permission denied البيانات يعطيني إجابات أكثر وضوحا (يغفل stderrق بسبب عدم تشغيل sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

أين:

  • / يمكن استبداله بالدليل الذي تريد بدء البحث منه
  • f يمكن استبدالها ب d إذا كنت تبحث عن دليل بدلا من ملف
  • -iname يمكن استبدالها ب -name إذا كنت تريد أن يكون البحث حساسا لحالة الأحرف
  • ال *يمكن حذف أحرف البدل الموجودة في مصطلح البحث إذا كنت لا تريد أحرف البدل في البحث

البديل هو:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

تقوم هذه الطريقة بإرجاع النتائج إذا تطابق مصطلح البحث في أي مكان في مسار الملف الكامل ، على سبيل المثال. /home/postgis-2.0.0/docs/Readme.txt

البحث هو واحد من أدوات لينكس/يونكس الأكثر فائدة.

حاول find . -type d | grep DIRNAME

حاول find . -name "*file_name*"

  • حيث يمكنك تغيير'.'(انظر إلى الدليل الحالي) إلى '/'(انظر إلى النظام بأكمله) أو '~/'(انظر إلى الدليل الرئيسي).

  • حيث يمكنك تغيير " - الاسم "إلى"- الاسم " إذا كنت لا تريد أي حالة حساسة.

  • حيث يمكنك تغيير "اسم الملف"(ملف يمكن أن يبدأ وينتهي بكل ما هو) إلى اسم الملف بالضبط.

هذا يجب تبسيط تحديد موقع الملف:

هذا من شأنه أن يعطيك المسار الكامل للملف

tree -f  / | grep postgis-2.0.0

تسرد الشجرة محتويات الدلائل بتنسيق يشبه الشجرة. ال -f يخبر شجرة لإعطاء المسار الكامل للملف. نظرا لأنه ليس لدينا أي فكرة عن موقعه أو موقعه الأصلي ، فمن الجيد البحث من جذر نظام الملفات / بشكل متكرر لأسفل.ثم نرسل الإخراج إلى البقرى لتسليط الضوء على كلمتنا, postgis-2.0.0

بينما find الأمر هو أبسط طريقة لاجتياز شجرة الدليل بشكل متكرر ، وهناك طرق أخرى وعلى وجه الخصوص لغتي البرمجة النصية التي تأتي مع أوبونتو افتراضيا لديها بالفعل القدرة على القيام بذلك.

باش

bash لديه لطيفة جدا globstar الخيار قذيفة ، والذي يسمح لاجتياز العودية من شجرة الدليل. كل ما عليك القيام به هو اختبار ما إذا كان البند في ./**/* التوسع هو ملف وما إذا كان يحتوي على النص المطلوب:

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0

بيرل

بيرل لديه وحدة البحث ، والذي يسمح لأداء اجتياز العودية من شجرة الدليل ، وعبر روتين تنفيذ إجراءات محددة عليها. باستخدام برنامج نصي صغير ، يمكنك اجتياز شجرة الدليل ، ودفع الملفات التي تحتوي على السلسلة المطلوبة إلى صفيف، ثم طباعتها على النحو التالي:

#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find(     sub{          -f $_ && $_ =~ $ARGV[0]                 && push @wanted_files,$File::Find::name     }, ".");foreach(@wanted_files){    print "$_\n"}

وكيف يعمل:

$ ./find_file.pl  "postgis-2.0.0"                                                       ./testdir/texts/postgis-2.0.0

بايثون

بيثون هي لغة برمجة أخرى تستخدم على نطاق واسع في عالم أوبونتو. على وجه الخصوص ، لديها os.walk() الوحدة النمطية التي تسمح لنا بتنفيذ نفس الإجراء على النحو الوارد أعلاه-اجتياز شجرة الدليل والحصول على قائمة الملفات التي تحتوي على السلسلة المطلوبة.

كما بطانة واحدة يمكن القيام بذلك على النحو التالي:

$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'                                                                         ['./testdir/texts/postgis-2.0.0']

السيناريو الكامل سيبدو هكذا:

#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."):    for i in f:        if "postgis-2.0.0" in i:            print(os.path.join(r,i))

$ find . -type f | grep IMG_20171225_*
يعطي
./03-05--2018/IMG_20171225_200513.jpg
النقطة بعد الأمر find هو القول نقطة البداية,
وبالتالي-المجلد الحالي,
"الأنابيب" (=تصفية) من خلال مرشح الاسم IMG_20171225_*

الأمر ‘تحديد موقع’ على ما يرام ، مجرد تحديث لوكاتدب أولا ، وذلك باستخدام الأمر`أوبداتدب’

إذا كان مثبتا بالفعل ، قد لا يكون اسم الملف الجديد ‘بوستجيس-2.0.0’ بعد الآن. عادة بعد عمليات التثبيت عبر مديري الحزم ، ستكون الملفات التنفيذية في أحد مجلدات ‘PATH باث’ ، حاول ‘أي بوستجيس’ لرؤية الموقع. إذا لم تقم بإرجاع أي شيء ، عندها فقط يجب أن تبحث يدويا عن موقع الملف.