Проверьте, существует ли файл или папка или нет (и многое другое) с помощью цикла IF

Я не ставил ничего Колотить, и когда я вхожу в чудесный мир Python, я немного забыл об этом другом друге, который так мне помог 🙂

Здесь я поместил кое-что для энтузиастов Bash, как гласит название ... Я покажу вам, как проверить, есть ли файл или папка в системе, просто используя: if

Мы собираемся создать файл .sh и дать ему права на выполнение, для этого достаточно ввести следующую команду в терминал:

сенсорный test.sh && chmod + x test.sh

При этом был создан файл (сенсорный 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 😉

привет


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

42 комментариев, оставьте свой

Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Хьюго сказал

    Другой способ обойтись без if… then..else:

    test -f /etc/hosts && elcomando

    Или также

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

    И т.п.

    1.    КЗКГ ^ Гаара сказал

      Вправо 😀
      … О_О… Ты Хьюго, Хьюго с Кубы? … Используя Windows8, WTF !!!

      1.    Хьюго сказал

        Что ж, да, я знакомлюсь с этой ОС, и, если честно, единственное, что я нашел полезным, - это менеджер копирования, в противном случае я лично нахожу это болью, особенно его гибридный интерфейс и приложения метро. Мне он нравится меньше, чем Vista и 7 (хотя и немного эффективнее этих), что мне тоже не понравилось. Все, что я использую, - это играть в NFS13 и Skyrim, но эта ОС занимает так много места, что мне пришлось удалить свой раздел Linux [snif].

        Однако, для вашего спокойствия, я скажу вам, что позавчера я загрузил Arch ISO за январь и планирую провести небольшой тест в его версии x86-64, как только я получу репо (вы можете иметь это?). Теперь, когда я увидел, что он по умолчанию использует подписанные пакеты, это дает мне больше уверенности.

        И мой отец также сказал мне, что пришлет мне Sony Xperia, которым я хочу воспользоваться, чтобы научиться программировать для Android, что было отложенным желанием. Так что успокойся, я еще не ушел на темную сторону силы, буахахахаха 😉

  2.   пац сказал

    мужской тест

    1.    MSX сказал

      Конечно.

  3.   RAW-Basic сказал

    Венас! ..

    Мы могли бы сделать то же самое .. ..но каталог передается как параметр ..

    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-Basic сказал

      Да, это действительно так ..

      Даже через параметры .. "* .mp4"

      1.    RAW-Basic сказал

        Например,

        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-Basic сказал

            Отлично! .. .. тогда сделай следующий шаг .. и сделай это ..

            6 месяцев назад ок. У меня только GNU / Linux на всех моих машинах, и мне больше не нужно .. ..не W $ .. или Wine .. ..и мне это более чем нравится .. 😉

            И я заражаю свое окружение .. так как все видят меня с моим Arch, быстрым, эффективным и счастливым .. ..и они просят меня установить Linux .. .. да! ..

        4.    Инукадзе сказал

          Вы также можете проверить их на наличие различных расширений, вы можете использовать что-то вроде

          #! / Bin / Баш
          Каталог = $ HOME / Загрузки

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

          использование {} позволяет указать несколько расширений, в этом случае использование "?" , это подстановочный знак, который позволяет вам использовать «Любой символ».

          Я надеюсь это поможет тебе

        5.    Педру сказал

          Я рекомендую команду find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos сказал

        Не работает, помещаю эти файлы в каталог:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / Баш
        ПУТЬ = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{печать »« $ 9} »
        если [[-f AB.ТЕКСТ]]; тогда
        echo »Введите IF, если есть AB
        .ТЕКСТ "
        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 [0m»
          КРАСНЫЙ = »\ 033 [31м»

          если [! «$ 1»];
          становятся
          echo "отсутствует параметр"
          выйти из $ EXIT_BAD
          fi

          cd "$ 1"

          files = »ls -h1 $ 1»

          для файла в $ ($ files); делать
          echo -e "здесь вы можете делать что угодно с $ BOLD $ файлом $ nc"
          сделанный

          выйти из $ EXIT_OK

  6.   MSX сказал

    @KZ, расскажи об этом подробнее: «И это потому, что я вхожу в чудесный мир Python»!

    1.    КЗКГ ^ Гаара сказал

      ХАХАХАХА нет ... мало-помалу
      Я все еще новичок в Python, у меня почти нет времени посвящать ему часы и часы, поэтому я медленно да, медленно, но уверен в своем обучении 😀

  7.   Audoban сказал

    Большое спасибо 😀 буквально вчера думал, как это сделать.

  8.   Рейхск сказал

    это с ncurses здорово 🙂

  9.   jazeco сказал

    одним словом… ОТЛИЧНО!
    Долгое время я совершенствовал скрипт для загрузки из Интернета, но столкнулся с проблемой: он скачивал запрошенные файлы 1 и снова, не имея возможности проверить наличие 1ro.
    Очень хорошее туто.

  10.   зулан сказал

    Приветствуется огромный вклад Чили.
    С каждым днем ​​меня приятно удивляет все больше LINUX,
    Да здравствует свободное программное обеспечение МИЕРДАААА.

  11.   Дэвид сказал

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

  12.   Grovher сказал

    Если я хочу проверить наличие любого файла в пути «/ tmp / Receivers», выполнить любую команду, как это будет?

    буду очень признательна

    привет

  13.   Хуан сказал

    Уважаемый, а по IF определить если файл полностью заселен ???. Я спрашиваю об этом, потому что, когда вы заполняете файл для передачи, он может принять его даже с половиной данных.

    Приветствую и спасибо за ответ.

  14.   Инукадзе сказал

    Что ж, я думаю, вам также следует добавить пример, такой как «Убедитесь, что нет« файла »или« каталога », например

    чтобы проверить, что он НЕ существует, например, используйте переменную->

    Справочник

    #! / Bin / Баш
    Directory = »$ HOME / Test Directory»
    Файл = »$ HOME / Тестовый файл»

    если [! -d "$ Directory"]; тогда
    echo "$ Directory не существует"
    echo "Создание ->" $ Directory "
    mkdir "$ Directory"
    еще
    echo "Каталог" $ Directory "уже существует
    fi

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

    1.    Katekyo сказал

      когда вы позже выполните проверку mkdir, может ли терминал создать его, потому что он может сломать шары, если это папка как корневая или системная ххах

  15.   Хулио Виначи сказал

    Приветствую KZKG ^ Gaara запрос, как я бы сделал, чтобы использовать curl. Я хотел бы знать, как я делаю с консоли ping URL-адрес, например, доступен ли он http://portal.com/directorio/archivo1.php Если file1 будет хранить IP-адреса посещения, именно для мониторинга команды мне нужно создавать этот пин каждые полчаса, чтобы я знал об общедоступном IP-адресе, поскольку он время от времени меняется, и я не могу подключиться по ssh.

    Приветствую заранее благодарю вас Бог.

    1.    КЗКГ ^ Гаара сказал

      Привет,

      Во-первых, вы должны сказать, что переменная 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 (например, natalia). У них обоих есть личные папки. your_user в / home и root в / (корневой каталог). Щелкнув правой кнопкой мыши по папке, посмотрите, кому она принадлежит. Если это root с вашим файловым менеджером, использующим sudo, gksu или kdesu, в зависимости от используемой среды, перейдите в корневой каталог -> root -> Desktop, и вы, вероятно, найдете фотографии и сможете удалить папку. Некоторые дистрибутивы, когда вы не являетесь владельцем файла или каталога и у вас нет прав доступа, сообщают, что каталог / файл не существует. Если вы являетесь владельцем и не являетесь пользователем root, сделайте то же самое с файловым менеджером с помощью sudo и т. Д. И перейдите в корневой каталог -> / home -> personal_folder -> Desktop и посмотрите, есть ли там фотографии и можете ли вы удалить Папка.
      Если это не сработает, вам нужно будет увидеть другие параметры в терминале (консоли).

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

    Привет, как дела? Я работаю в bash и хотел бы знать, как проверить, есть ли каталог, введенный с клавиатуры, например

    #! / Bin / Баш
    читать маршрут
    #Enter ~ / Рабочий стол
    # Затем я пытаюсь перейти в этот каталог
    cd $ path
    # Я получаю следующее сообщение bash: cd: ~ / Desktop: файл или каталог не существует

    У меня вопрос: что я могу сделать, чтобы ввести его с клавиатуры и использовать как путь к каталогу?

  18.   Мигель сказал

    И как я могу узнать, существует ли группа,

  19.   Heidy сказал

    хорошо, у меня проблема в канайме, когда я нажимаю кнопку cunaguaro, он говорит, что нет файла или каталога, как это было бы для решения этой проблемы, а остальное не открывается cunaguaro, пожалуйста, спасибо.

  20.   Carlos сказал

    Как сделать if в BASH, если в имени файла есть пробелы?
    Например:
    Апрель data.xlsx

    Чтобы спросить, существует ли файл

    1.    Мануэль Алькосер Хименес сказал

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

      if [["$ variable" == Данные \ месяц \ of \ April.xlsx]]; затем эхо "совпадение"; фи

      Вы также можете:
      if [["$ variable" == 'Данные за апрель.xlsx']]; затем эхо "совпадение"; фи

      Другой вариант:
      [["$ Variable" == 'Данные за апрель.xlsx']] && echo 'соответствует' || эхо 'не совпадает'

      В некоторых темных областях Интернета они рекомендуют использовать [[]] вместо [], и если вы собираетесь сравнивать числа, тогда: ((variable> = 3)) && echo 'переменная больше или равна 3' || echo 'переменная меньше 3'

      Поэтому для чисел:

      если ((число! = 4)); затем эхо "$ {число} не 4"; иначе echo "$ {число} равно 4"; фи

  21.   Цезарь Матеус сказал

    как вы можете создать код для проверки наличия в каталоге определенного текста, чтобы иметь возможность его редактировать.

    пример:

    если (текст1)

    ничего не делать

    еще

    изменить text1 на text2

  22.   Мигель сказал

    вопрос, как бы каждые 15 секунд проверять, существует файл или нет, спасибо.

  23.   берег реки сказал

    Привет,
    это:
    если [-w / home / Komun / Logs / ti]; тогда
    Узнайте, доступен ли файл для записи. Но это основано на разрешениях пользователя. Можно ли узнать, есть ли у группы или у остальных разрешения?