تحقق مما إذا كان الملف أو المجلد موجودًا أم لا (وأكثر) مع حلقة IF

أنا لم أضع أي شيء من سحق، وهو أنه أثناء دخولي إلى عالم بايثون الرائع ، نسيت القليل عن هذا الصديق الآخر الذي ساعدني كثيرًا 🙂

هنا أضع شيئًا لعشاق Bash ، كما يقول العنوان ... سأوضح لك كيفية التحقق من وجود ملف أو مجلد في النظام أم لا ، فقط باستخدام: if

سنقوم بإنشاء ملف .sh ونمنحه أذونات التنفيذ ، لذلك يكفي وضع الأمر التالي في Terminal:

اختبار اللمس. sh && chmod + x test.sh

هذا ما فعله هو إنشاء الملف (اختبار اللمس) كما يمنحك أذونات التنفيذ (chmod + x test.sh)

ثم دعنا نكتب ما يلي فيه:

if [ -d /opt/ ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

ماذا يفعل هذا؟

بسيط 😀

في السطر الأول - » إذا [-d / opt /] ؛

نسأل هنا ، هل الدليل / opt / موجود؟ نعم دليل / مجلد ، لأن ملف -d يعني الدليل أو المجلد.
ثم في حالة وجودها سنطبع في المحطة «نعم ، إنها موجودة.»(هذا هو السطر 2 و 3)
وإلا و / opt / غير موجود ، فسنطبع "لا لا يوجد»(السطر 4 و 5)
ثم في السطر الأخير (رقم 6) نغلق if وهذا كل شيء.

المادة ذات الصلة:
قم بتأسيس اتصال الشبكة بين جهاز الكمبيوتر وأجهزة Virtualbox الافتراضية

قم بإجراء الاختبار ، وسوف يظهر لك أن / opt / موجود.

إذا كنت تريد مني أن أعرض لك النص الآخر (النص غير الموجود) ، فقم بتغيير / اختيار / لأي مجلد آخر غير موجود في نظامك ، على سبيل المثال: / asd /

كما ترون ، يساعدنا -d في معرفة ما إذا كان الدليل موجودًا ، حسنًا الآن إذا قمنا بتغيير -d إلى -f هو التحقق من وجود الملفات (-d = دليل ، -f = ملف / ملف)

على سبيل المثال:

if [ -f /etc/hosts ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

فيما يلي قائمة الخيارات:

-d - »تحقق من وجود دليل معين

-f - »تحقق من وجود ملف معين

-w - »تحقق مما إذا كان ملف معين لديه أذونات الكتابة

-x - »تحقق مما إذا كان ملف معين لديه أذونات التنفيذ.

وليس هناك الكثير لإضافة much

أعلم أن هذا سيكون مفيدًا وممتعًا جدًا لأولئك الذين يحبون البرمجة في Bash 😉

تحياتي


محتوى المقال يلتزم بمبادئنا أخلاقيات التحرير. للإبلاغ عن خطأ انقر فوق هنا.

42 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   هوغو قال

    طريقة أخرى للقيام بذلك بدون إذا ... ثم .. آخر:

    test -f /etc/hosts && elcomando

    او ايضا

    test ! -f /etc/hosts && echo "no se encontró el archivo"

    إلخ.

    1.    KZKG ^ جارا قال

      حق 😀
      … O_O… هل أنت هوغو ، هوغو من كوبا؟ ... باستخدام Windows8 ، WTF !!!

      1.    هوغو قال

        حسنًا ، نعم ، أنا أعتاد على نظام التشغيل هذا ، وإذا كان عليّ أن أكون صريحًا ، فإن الشيء الوحيد الذي وجدته مفيدًا هو مدير النسخ ، وإلا فأنا شخصياً أجده آفة ، لا سيما واجهته الهجينة وتطبيقات المترو. أنا أحبها أقل من Vista و 7 (وإن كانت أكثر فاعلية قليلاً من هذه) ، والتي لم أحبها أيضًا. كل ما أستخدمه من أجله هو تشغيل NFS13 و Skyrim ، لكن نظام التشغيل هذا يشغل مساحة كبيرة لدرجة أنني اضطررت إلى حذف قسم Linux الخاص بي [snif].

        ومع ذلك ، من أجل راحة بالك ، سأخبرك أنه في اليوم السابق للأمس قمت بتنزيل Arch ISO لشهر يناير وأخطط لإجراء اختبار صغير في إصداره x86-64 ، بمجرد حصولي على الريبو (هل ستحصل عليه؟). الآن بعد أن رأيت أنه يستخدم حزم موقعة بشكل افتراضي ، فإنه يمنحني المزيد من الثقة للغطس.

        وأخبرني والدي أيضًا أنه سيرسل لي هاتف Sony Xperia ، والذي أريد الاستفادة منه لتعلم بعض البرمجة لنظام Android ، والتي كانت أمنية معلقة. لذا اهدأ ، فأنا لم أذهب بعد إلى الجانب المظلم من القوة ، بوهاهاها 😉

  2.   باتز قال

    اختبار الرجل

    1.    MSX قال

      بالتأكيد.

  3.   RAW الأساسي قال

    ويناس! ..

    يمكننا أن نجعل نفس الشيء .. .. ولكن يتم تمرير الدليل كمعامل ..

    if [ -d $1 ];
    then
    echo "Sí, sí existe."
    else
    echo "No, no existe"
    fi

    ونسميها:

    ./test.sh / opt /

    تحية..

  4.   سافو قال

    إذا لم تكن دورة xD

  5.   جريجوريو اسباداس قال

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

    إذا [-f * .mp4] ؛
    ...

    1.    RAW الأساسي قال

      نعم ، هذا صحيح تماما ..

      حتى من خلال المعلمات .. "* .mp4"

      1.    RAW الأساسي قال

        على سبيل المثال

        if [ -f $1 ];
        then
        rm -r $1
        else
        ls
        fi

        إذا اتصلت به: ./test.sh * .mp4

        إذا عثر على ملفات .mp4 ، فسيحذفها ... ... لكنه لا يسرد الملفات الموجودة في هذا الدليل ...

        1.    جريجوريو اسباداس قال

          شكرا على ردود الفعل والنصائح! 🙂

        2.    خواكين قال

          فاتك f xD

          rm -rf دولار 1

          هذا أكثر إثارة!

        3.    b1tblu3 قال

          رائع !!! ، كل يوم أقع في حب Linux أكثر ، يتم إنزال Windows إلى زاوية مظلمة من محرك الأقراص الثابتة الخاص بي ، والذي على وشك محوه لإفساح المجال أمام ضوء Linux.

          1.    RAW الأساسي قال

            ممتاز! .. .. ثم اتخذ الخطوة التالية .. وأخرجها ..

            قبل 6 أشهر تقريبا. لدي فقط جنو / لينكس على كل أجهزتي ولست بحاجة إلى المزيد .. ..لا W $ .. أو Wine .. .. وأنا أكثر من سعيد بهذا الشكل .. 😉

            وانا اصيب محيطي .. لان الجميع يراني مع قوسي سريع وفعال وسعيد .. .. ويطلبون مني تثبيت لينكس .. نعم! .. 😀

        4.    إينوكازي قال

          يمكنك أيضًا التحقق منها بحثًا عن امتدادات مختلفة ، يمكنك استخدام شيء مثل

          #! / بن / باش
          الدليل = $ HOME / Downloads

          إذا [دليل $]؛ ثم
          صدى «إليك قائمة أنواع الملفات:»
          صدى "mp1، mp2، mp3، mp4، wav، flac، flaad، aud، midi"
          ls {* .mp ؟، *. wav، *. fla، *. aud * .midi}
          fi

          باستخدام {} يسمح لك بتحديد عدة امتدادات في هذه الحالة ، استخدام "؟" ، هو حرف بدل ، والذي يسمح لك بأخذ "أي حرف".

          أرجو أن تعلم

        5.    بيدرو قال

          أوصي باستخدام الأمر find [directory] [search_pattern] –exec [command] {} \

      2.    كارلوس قال

        لا يعمل ، أضع هذه الملفات في الدليل:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / بن / باش
        المسار = / tmp / TEST
        cd $ الطريق
        ls -la | awk '{print »« $ 9}'
        إذا [[-f AB.رسالة قصيرة]]؛ ثم
        صدى »أدخل IF إذا كان هناك أي AB
        .رسالة قصيرة "
        fi
        إذا [-f AB20160422.TXT] ؛ ثم
        صدى "إدخال لملف AB معين"
        fi

        عندما أضع [-f AB.TXT] يعطي خطأ
        عندما أضع [[-f AB
        .TXT]] لا يعطي خطأ ولكن لا يمكن العثور على الملف
        يعمل فقط عندما أضع ملفًا معينًا ، على سبيل المثال:
        إذا [-f AB20160422.TXT] ؛ ثم

        لا يمكنني الحصول عليه للعمل مع wildcards * أو؟

        1.    بيدرو قال

          #! / usr / bin / env bash
          #.ترميز = utf-8.

          القارات

          EXIT_OK = 0
          EXIT_BAD = 66

          بولد = »\ 033 [1 م»
          NC = »\ 033 [0 م»
          الأحمر = »\ 033 [31 م»

          إذا [! "$ 1"] ؛
          then
          صدى "معلمة مفقودة"
          خروج $ EXIT_BAD
          fi

          قرص مضغوط "$ 1"

          الملفات = »ls -h1 $ 1»

          للملف في $ (files $) ؛ فعل
          echo -e "يمكنك فعل أي شيء باستخدام $ BOLD $ file $ nc هنا"
          فعل

          خروج $ EXIT_OK

  6.   MSX قال

    KZ ، أخبر المزيد عن هذا: "وذلك لأنني أدخل عالم بايثون الرائع"!

    1.    KZKG ^ جارا قال

      هاهاها ناه ... شيئا فشيئا 🙂
      ما زلت مجرد مبتدئ في بايثون ، بالكاد أملك الوقت لتخصيص ساعات وساعات لها ، لذا فأنا بطيئة ، نعم ، بطيئة لكنني متأكد من تعلمي 😀

  7.   أودوبان قال

    شكراً جزيلاً لكم 😀 بالأمس فقط كنت أفكر في كيفية القيام بذلك.

  8.   ReichSk قال

    هذا مع ncurses عظيم

  9.   جازيكو قال

    في كلمة واحدة ... ممتاز!
    لفترة طويلة كنت أتقن برنامجًا نصيًا لإجراء تنزيلات من الإنترنت ، لكنني واجهت مشكلة في تنزيل الملفات التي طلبها 1 ومرة ​​أخرى دون أن أتمكن من التحقق من وجود 1ro.
    جيد جدا توتو.

  10.   زولان قال

    ونقدر المساهمة الهائلة ، هنا من شيلي.
    كل يوم تفاجئني أكثر من لينوكس ،
    تحيا البرمجيات الحرة MIERDAAAA.

  11.   ديفيد قال

    خدمة ل
    تحقق مما إذا كان الملف من دليل

  12.   غروفير قال

    إذا كنت أرغب في التحقق من وجود أي ملف في مسار «/ tmp / الاستقبال» ، قم بتشغيل أي أمر لي ، كيف سيكون؟

    ساكون ممتنا جدا

    تحياتي

  13.   خوان قال

    عزيزي ، ولتحديد إذا كان الملف ممتلئًا بالكامل ؟؟؟. أسأل هذا لأنه عندما تملأ الملف للإرسال ، يمكن أن يأخذها حتى مع نصف البيانات.

    تحية طيبة وشكرا على استجابتك.

  14.   إينوكازي قال

    حسنًا ، أعتقد أنه يجب عليك أيضًا إضافة مثال ، مثل "تحقق من عدم وجود" ملف "أو" دليل "على سبيل المثال

    للتحقق من عدم وجوده ، على سبيل المثال استخدم متغير>

    دليل

    #! / بن / باش
    الدليل = »$ HOME / دليل الاختبار»
    ملف = »$ HOME / ملف اختبار»

    إذا [! -d "دليل $"] ؛ ثم
    صدى "لا يوجد دليل $"
    صدى "إنشاء ->" $ Directory "
    mkdir "دليل $"
    آخر
    صدى "الدليل" $ Directory "موجود بالفعل
    fi

    إذا [! -d "ملف $"] ؛ ثم
    صدى "الملف $ غير موجود"
    صدى "إنشاء ->" ملف $ "
    المس "ملف $"
    آخر
    صدى "ملف" $ File "موجود بالفعل
    fi

    1.    كاتيكيو قال

      عندما تقوم بفحص mkdir لاحقًا إذا كان بإمكان الجهاز الطرفي إنشاؤه لأنه يمكن أن يكسر الكرات إذا كان مجلدًا كجذر أو نظام hhah

  15.   جوليو فيناتشي قال

    تحياتي KZKG ^ Gaara استعلام كما أفعل لاستخدام حليقة. أود أن أعرف كيف أفعل من وحدة التحكم إلى ping عنوان url لمعرفة ما إذا كان متاحًا على سبيل المثال http://portal.com/directorio/archivo1.php حيث سيقوم file1 بتخزين عناوين IP الخاصة بالزيارة ، فلابد من عمل هذا الدبوس كل نصف ساعة من أجل مراقبة الفريق حتى أكون على دراية بعنوان IP العام لأنه يتغير من وقت لآخر ولا يمكنني الاتصال بواسطة ssh .

    تحية طيبة لكم مقدما بارك الله فيكم.

    1.    KZKG ^ جارا قال

      مرحبا هناك،

      أولاً ، عليك أن تقول أن متغير IP (على سبيل المثال) هو محتوى هذا الملف ، لذلك عليك:
      1. قم بتنزيل الملف
      2. عرض محتواها والحصول على IP من هناك
      3. أن IP هو المتغير

      على سبيل المثال:
      هنا نقوم بتنزيل الملف - »wget http://portal.com/directorio/archivo1.php -o file.html
      ثم نقوم بتعيين متغير محتواه: - »: $ {IP: =` cat file.html`}
      .. بافتراض أن محتوى هذا الملف يحتوي على IP فقط ، وإلا فسيتعين عليك العمل مع grep أو awk أو head.

      بمجرد أن يكون لديك IP كمتغير بالفعل ، فإن الباقي هو أبسط شيء في العالم 🙂

      إذا كنت تريد الكتابة إليّ على البريد الإلكتروني (kzkggaara [at] desdelinux [dot] net) فسأساعدك بكل سرور

      1.    جوليو فيناتشي قال

        شكرا جزيلا kzkggaara ممتن جدا لك.

  16.   ناتاليا قال

    مرحبًا ، لا أفهم الكثير عن الحوسبة ولا أعرف ما إذا كان هذا المنشور متعلقًا بالمشكلة التي لدي.

    أعلق في حال قرأتني ، رغم أن المنشور منذ عام مضى:
    اتضح أنني أنشأت مجلدًا على سطح المكتب لتخزين بعض مقاطع الفيديو. حسنًا ، لقد حذفت مقاطع الفيديو هذه لأنني لم أعد بحاجة إليها والآن يخبرني هذا المجلد أنه غير موجود (على الرغم من أنه مرئي على سطح المكتب).

    - هذه أول مشكلة لدي:
    لا يمكنني حذف المجلد.

    - المشكلة الثانية وأعتقد أنها الأهم:
    في محاولة لحذف المجلد ، قمت بوضع مجلد PHOTOS. الآن عندما أقوم بفتح المجلد "غير موجود" يكون فارغًا والصور غير موجودة.

    كيف يمكنني استعادة الصور؟ لقد أعطيت الخيار داخل مجلد "إظهار المستندات المخفية" ولكن مجلد PHOTOS لا يظهر.

    آمل أن تعرف كيف يتم حلها.
    غراسياس.

    1.    فالدو قال

      يوجد مستخدمان رئيسيان: root و your_user (ناتاليا على سبيل المثال). كلاهما لديه مجلدات شخصية. your_user in / home and root in / (الدليل الجذر). عن طريق النقر بزر الماوس الأيمن على المجلد ، انظر لمن ينتمي. إذا كان الجذر مع مدير الملفات الخاص بك باستخدام sudo أو gksu أو kdesu اعتمادًا على البيئة التي تستخدمها ، فانتقل إلى الدليل الجذر -> الجذر -> سطح المكتب وستجد على الأرجح الصور ويمكنك حذف المجلد. تخبرك بعض التوزيعات عندما لا تكون مالك الملف أو الدليل وليس لديك أذونات وصول بأن الدليل / الملف غير موجود. إذا كنت المالك ولم تكن جذرًا ، فافعل الشيء نفسه مع مدير الملفات باستخدام sudo ، وما إلى ذلك وانتقل إلى الدليل الجذر -> / home -> personal_folder -> سطح المكتب ومعرفة ما إذا كانت الصور موجودة وما إذا كان يمكنك حذف المجلد.
      إذا لم ينجح ذلك ، فسيتعين عليك رؤية خيارات أخرى من الجهاز الطرفي (وحدة التحكم).

  17.   بيدرو مانويل اجوايو مونيوز قال

    مرحبا كيف حالك انا اقوم بعمل في باش وأود أن أعرف كيف أتحقق مما إذا كان هناك دليل تم إدخاله من لوحة المفاتيح مثلا

    #! / بن / باش
    اقرأ الطريق
    #Enter ~ / سطح المكتب
    # ثم أحاول التنقل في هذا الدليل
    مسار $ cd
    # أحصل على رسالة bash التالية: cd: ~ / Desktop: الملف أو الدليل غير موجود

    سؤالي هو ، ما الذي يمكنني فعله لأدخله من لوحة المفاتيح وأعتبره مسار دليل؟

  18.   ميغيل قال

    وكيف يمكنني معرفة وجود مجموعة ،

  19.   هايدي قال

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

  20.   كارلوس قال

    كيف تفعل إذا كان في BASH إذا كان اسم الملف يحتوي على مسافات؟
    على سبيل المثال:
    بيانات أبريل. xlsx

    للسؤال عما إذا كان الملف موجودًا

    1.    مانويل ألكوسر جيمينيز قال

      كارلوس ، مثل هذا:

      إذا [["$ variable" == بيانات \ شهر \ من \ April.xlsx]]؛ ثم صدى "مباراة" ؛ فاي

      يمكنك أيضا:
      if [["$ variable" == 'بيانات شهر April.xlsx']]؛ ثم صدى "مباراة" ؛ فاي

      خيار آخر:
      [["$ Variable" == 'بيانات April.xlsx']] && صدى 'تطابق' || صدى "غير متطابق"

      تنصح بعض المناطق المظلمة على الإنترنت باستخدام [[]] بدلاً من [] ، وإذا كنت تقارن الأرقام إذن: ((المتغير> = 3)) && echo 'المتغير أكبر من أو يساوي 3' || متغير صدى أقل من 3

      لذلك ، بالنسبة للأرقام:

      إذا ((رقم! = 4)) ؛ ثم صدى "$ {number} ليس 4" ؛ آخر صدى "$ {number} هو 4" ؛ فاي

  21.   سيزار ماتيوس قال

    كيف يمكنك عمل كود للتحقق إذا كان الدليل يحتوي على نص معين ، لتتمكن من تحريره.

    على سبيل المثال:

    إذا (النص 1)

    لا تفعل شيئا

    آخر

    قم بتغيير text1 إلى text2

  22.   ميغيل قال

    سؤال ، كيف يتم التحقق كل 15 ثانية إذا كان الملف موجودًا أم لا ، شكرًا لك.

  23.   ضفه النهر قال

    مرحبا،
    هذه:
    إذا [-w / home / Komun / Logs / ti] ؛ ثم
    اكتشف ما إذا كان الملف قابلاً للكتابة. لكنه يعتمد على أذونات المستخدم. هل يمكن القيام بذلك لمعرفة ما إذا كان لدى المجموعة أو الآخرين أذونات؟