Перевірте, чи існує файл чи папка (або більше) із циклом IF

Я нічого не ставив Удар, і це те, що коли я потрапляю в дивовижний світ Python, я трохи забув про цього іншого друга, який мені так допоміг 🙂

Тут я щось доклав до ентузіастів Bash, як сказано в назві ... Я покажу вам, як перевірити, чи існує файл чи папка в системі, просто використовуючи: if

Ми збираємося створити файл .sh і надати йому дозволи на виконання, для цього просто вкладіть таку команду в термінал:

touch test.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 / існує.

Якщо ви хочете, щоб я показав вам інший текст (той, який не існує), змініть / 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 - »Перевірте, чи певний файл має дозволи на виконання.

Ну і тут не можна набагато більше додати 🙂

Я знаю, що це буде дуже корисно та цікаво для тих, хто любить програмувати на Bash 😉

привіт


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  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 Arch на січень і планую провести невеличку перевірку у своїй версії 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.   саво - сказав він

    IF не є циклом 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 місяців тому приблизно У мене є тільки GNU / Linux на всіх моїх машинах, і мені не потрібно більше .. ..не W $ .. або Wine .. ..і я більш ніж задоволений таким .. 😉

            І я заражаю своє оточення .. оскільки всі бачать мене за допомогою моєї Arch, швидкої, ефективної та щасливої ​​.. ..і просять мене встановити Linux .. .. так! .. 😀

        4.    Інукадзе - сказав він

          Ви також можете перевірити їх на наявність різних розширень, ви можете використовувати щось на зразок

          #! / бін / баш
          Каталог = $ HOME / Завантаження

          якщо [$ Каталог]; тоді
          echo "Ось список типів файлів:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          використання {} дозволяє вказати кілька розширень у цьому випадку, використання "?" , є узагальнюючим знаком, що дозволяє взяти "Будь-який символ".

          Сподіваюся, це допоможе вам

        5.    Педро - сказав він

          Я рекомендую команду find [каталог] [шаблон_пошуку] –exec [команда] {} \

      2.    Карлос - сказав він

        Це не працює, я помістив ці файли в каталог:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / бін / баш
        ШЛЯХ = / tmp / TEST
        cd $ МАРШРУТ
        ls -la | awk '{друк »« $ 9} »
        якщо [[-f AB.TXT]]; тоді
        echo »Введіть IF, якщо є AB
        .TXT »
        fi
        якщо [-f AB20160422.TXT]; тоді
        echo "введення для певного файлу AB"
        fi

        коли я ставлю [-f AB.TXT] видає помилку
        коли я ставлю [[-f AB
        .TXT]] не видає помилку, але не може знайти файл
        це працює лише тоді, коли я розміщу певний файл, наприклад:
        якщо [-f AB20160422.TXT]; тоді

        Я не можу змусити його працювати з узагальнюючими знаками * або?

        1.    Педро - сказав він

          #! / usr / bin / env bash
          #.кодування = utf-8.

          КОНСТАНТИ

          EXIT_OK = 0
          EXIT_BAD = 66

          СМІСТИЙ = »\ 033 [1м»
          NC = »\ 033 [0м»
          ЧЕРВОНИЙ = »\ 033 [31м»

          якщо [! "1 долар"];
          потім
          echo "відсутній параметр"
          вихід $ EXIT_BAD
          fi

          компакт-диск "$ 1"

          files = »ls -h1 $ 1»

          для файлу в $ ($ files); робити
          echo -e "Ви можете зробити що завгодно з $ BOLD $ file $ nc тут"
          зроблений

          вихід $ EXIT_OK

  6.   MSX - сказав він

    @KZ, розкажи більше про це: "і це тому, що я потрапляю в дивовижний світ Python"!

    1.    KZKG ^ Гаара - сказав він

      ХАХАХАХА, ні ... потроху 🙂
      Я все ще просто новачок у Python, навряд чи встигаю приділяти йому години і години, тому я повільний так, повільний, але впевнений у своєму навчанні 😀

  7.   Аудобан - сказав він

    Щиро дякую 😀 буквально вчора я думав, як це зробити.

  8.   РейхСк - сказав він

    це з ncurses чудово 🙂

  9.   Jazeco - сказав він

    одним словом ... ВІДМІННО!
    Довгий час я вдосконалював сценарій для завантаження з Інтернету, але у мене була проблема, що він завантажував файли, які вимагав 1 і знову, не маючи можливості перевірити існування 1ro.
    Дуже хороший Tuto.

  10.   зулан - сказав він

    Величезний внесок, тут з Чилі цінується.
    Щодня LINUX мене приємно дивує,
    Хай живе безкоштовне програмне забезпечення MIERDAAAA.

  11.   Девід - сказав він

    служити для
    перевірити, чи файл з каталогу

  12.   Гровхер - сказав він

    Якщо я хочу перевірити наявність будь-якого файлу в шляху «/ tmp / приймачі», виконайте будь-яку команду, як би це було?

    Буду дуже вдячний

    привіт

  13.   Джон - сказав він

    Шановний, і за допомогою IF визначити, чи файл заповнений повністю ???. Я запитую це, тому що, коли ви заповнюєте файл для передачі, він може взяти його навіть з половиною даних.

    Вітаю та дякую за вашу відповідь.

  14.   Інукадзе - сказав він

    Ну, думаю, вам слід також додати приклад, наприклад, "Переконайтесь, що немає" файлу "або" каталогу ", як наприклад

    щоб перевірити, чи НЕ існує, наприклад, використовуйте змінну->

    Каталог

    #! / бін / баш
    Каталог = »$ HOME / Тестовий каталог»
    Файл = »$ HOME / Тестовий файл»

    якщо [! -d "$ Каталог"]; тоді
    echo "Немає $ каталогу"
    echo "Створення ->" $ Каталог "
    mkdir "Каталог $"
    ще
    echo "Каталог" $ Directory "вже існує
    fi

    якщо [! -d "$ Файл"]; тоді
    echo "Файл $ не існує"
    echo "Створення ->" Файл $ "
    торкніться "$ File"
    ще
    echo "Файл" $ File "вже існує
    fi

    1.    Катекьо - сказав він

      коли ви виконуєте перевірку mkdir пізніше, чи зможе термінал створити його, тому що він може зламати кульки, якщо це папка як root або система hhah

  15.   Хуліо Віначі - сказав він

    Привіт KZKG ^ Гаара запит, як би я зробив, щоб використовувати завивку. Я хотів би знати, як я працюю з консолі, щоб перевірити URL-адресу, щоб перевірити, чи вона доступна, наприклад http://portal.com/directorio/archivo1.php Там, де файл1 зберігатиме IP-адреси відвідувань, саме для моніторингу команди мені потрібно робити цей штифт кожні півгодини, щоб я був обізнаний про загальнодоступний IP, оскільки час від часу він змінюється, і я не можу встановити зв’язок через ssh.

    Вітаємо заздалегідь спасибі, Бог благословить вас.

    1.    KZKG ^ Гаара - сказав він

      Привіт як це відбувається

      По-перше, ви повинні сказати, що змінна IP (наприклад) є вмістом цього файлу, для цього вам потрібно:
      1. Завантажте файл
      2. Перегляньте його вміст та отримайте звідти IP
      3. Цей IP є змінною

      Наприклад:
      Тут ми завантажуємо файл - »wget http://portal.com/directorio/archivo1.php -o файл.html
      Потім ми призначаємо змінній її вміст: - »: $ {IP: =` cat file.html`}
      .. припускаючи, що вміст цього файлу має лише IP, якщо ні, то вам доведеться працювати з grep, awk або head.

      Як тільки ви вже маєте ІР як змінну, решта - це найпростіша річ у світі 🙂

      Якщо хочете, напишіть мені на електронну пошту (kzkggaara[at]desdelinux[dot]net) З радістю допоможу

      1.    Хуліо Віначі - сказав він

        Щиро дякую kzkggaara дуже вдячний.

  16.   Наталія - сказав він

    Привіт, я мало що розумію в обчислювальній техніці, і я не знаю, чи пов’язана ця публікація з моєю проблемою.

    Я коментую на випадок, якщо ви мене прочитаєте, хоч допис від року тому:
    Виявляється, я створив на робочому столі папку для зберігання деяких відео. Ну, я видалив ці відео, тому що вони мені більше не потрібні, і тепер ця папка повідомляє мені, що воно не існує (хоча це видно на моєму робочому столі).

    - Це перша у мене проблема:
    Я не можу видалити папку.

    - Друга проблема, і я вважаю важливішим:
    Намагаючись видалити папку, я помістив папку ФОТО. Тепер, коли я відкриваю папку, яка "не існує", вона порожня, а ФОТО немає.

    Як я можу відновити фотографії? Я дав можливість всередині папки "Показати приховані документи", але папка ФОТО не відображається.

    Сподіваюся, ви можете знати, як це вирішується.
    Спасибо.

    1.    valdo - сказав він

      Є два основних користувача: root і your_user (наприклад, Natalia). В обох є особисті папки. ваш_користувач у / home та root у / (кореневий каталог). Клацнувши правою кнопкою миші на папці, ви побачите, кому вона належить. Якщо у вашому файловому менеджері це root, використовуючи sudo або gksu або kdesu, залежно від середовища, яке ви використовуєте, перейдіть до кореневого каталогу -> root -> Desktop, і ви, ймовірно, знайдете фотографії та зможете видалити папку. Деякі дистрибутиви, коли ви не є власником файлу або каталогу і у вас немає дозволів на доступ, повідомляють, що каталог / файл не існує. Якщо ви є власником і у вас немає прав користувача, зробіть те ж саме з файловим менеджером за допомогою sudo тощо і перейдіть до кореневого каталогу -> / home -> personal_folder -> Робочий стіл і перевірте, чи є там фотографії, і чи можете ви їх видалити папку.
      Якщо це не спрацює, вам доведеться переглянути інші опції з терміналу (консолі).

  17.   Педро Мануель Агуайо Муньос - сказав він

    Привіт, як справи? Я роблю роботу в bash, і я хотів би знати, як перевірити, чи є з клавіатури введений каталог, наприклад

    #! / бін / баш
    прочитати маршрут
    #Enter ~ / Desktop
    # Потім я намагаюся орієнтуватися в цьому каталозі
    cd $ шлях
    # Я отримую таке повідомлення bash: cd: ~ / Desktop: Файл або каталог не існує

    Моє питання полягає в тому, що я можу зробити, щоб я ввів його з клавіатури і прийняв як шлях до каталогу?

  18.   Мігель - сказав він

    І як я можу знати, чи існує група,

  19.   хайді - сказав він

    добре У мене є проблема в моєму canaima, коли я натискаю кнопку cunaguaro, там сказано, що немає файлу чи каталогу, як це було б зроблено для вирішення цієї проблеми, а решта не відкриває cunaguaro, будь ласка, дякую.

  20.   Карлос - сказав він

    Як зробити if у BASH, якщо в назві файлу є пробіли?
    Наприклад:
    Квітневі дані.xlsx

    Щоб запитати, чи існує файл

    1.    Мануель Алькосер Хіменес - сказав він

      Карлос, ось так:

      якщо [["$ змінна" == Дані \ місяць \ з \ квітня.xlsx]]; потім луна "збіг"; fi

      Ви також можете:
      if [["$ variable" == 'Дані за квітень.xlsx']]; потім луна "збіг"; fi

      Інший варіант:
      [["" $ Variable "== 'Дані за квітень.xlsx']] && echo 'збіги' || echo 'не відповідає'

      У деяких темних областях Інтернету вони рекомендують використовувати [[]] замість [], і якщо ви збираєтеся порівнювати числа, тоді: ((змінна> = 3)) && echo 'змінна більше або дорівнює 3' | | echo 'змінна менше 3'

      Отже, для чисел:

      if ((число! = 4)); тоді луна "$ {число} не 4"; інакше ехо "$ {число} дорівнює 4"; fi

  21.   Цезар Матей - сказав він

    як ви можете зробити код для перевірки, якщо каталог має певний текст, щоб мати можливість його редагувати.

    приклад:

    якщо (text1)

    нічого не робити

    ще

    змінити text1 на text2

  22.   Мігель - сказав він

    питання, як було б перевіряти кожні 15 секунд, якщо файл існує чи ні, дякую.

  23.   берег річки - сказав він

    Привіт
    це:
    якщо [-w / home / Komun / Logs / ti]; тоді
    Дізнайтеся, чи файл можна записати. Але це базується на дозволах користувача. Чи можна це зробити, щоб з’ясувати, чи має група чи інші дозволи?