أود تحديد موقع ملف باستخدام سطر الأوامر. لقد حاولت:
find . -type f -name "postgis-2.0.0"
و
locate postgis-2.0.0
ولكن دون جدوى. ما هو الأمر لتحديد دليل الملف, قدمت اسمها?
أود تحديد موقع ملف باستخدام سطر الأوامر. لقد حاولت:
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 باث’ ، حاول ‘أي بوستجيس’ لرؤية الموقع. إذا لم تقم بإرجاع أي شيء ، عندها فقط يجب أن تبحث يدويا عن موقع الملف.