Skontrolujte, či súbor alebo priečinok existuje alebo nie (a viac) pomocou slučky IF

Ja som nič z toho nedával tresnúť, a to je to, že keď vstupujem do úžasného sveta Pythonu, trochu som zabudol na tohto iného priateľa, ktorý mi tak veľmi pomohol

Tu som dal niečo pre nadšencov Bash, ako hovorí nadpis ... Ukážem vám, ako skontrolovať, či v systéme existuje súbor alebo priečinok, a to iba pomocou: if

Chystáme sa vytvoriť súbor .sh a udeliť mu oprávnenie na vykonávanie, stačí do terminálu vložiť nasledujúci príkaz:

dotykový test.sh && chmod + x test.sh

To, čo urobil, je vytvoriť súbor (dotykový test.sh) a tiež vám dá povolenie na spustenie (chmod + x test.sh)

Potom doň napíšme toto:

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

Čo to robí?

Jednoduché 😀

V prvom riadku - » ak [-d / opt /];

Tu sa pýtame, existuje adresár / opt /? Áno adresár / priečinok, pretože -d znamená adresár alebo priečinok.
Potom, ak existuje, vytlačíme v termináli «Áno, existuje.»(Toto sú riadky 2 a 3)
V opačnom prípade / opt / neexistuje, potom vytlačíme «Nie, neexistuje»(Riadky 4 a 5)
Potom v poslednom riadku (číslo 6) zatvoríme if a je to.

Súvisiaci článok:
Nadviažte sieťové pripojenie medzi počítačom a virtuálnymi strojmi Virtualbox

Vykonajte test, ktorý vám ukáže, že / opt / existuje.

Ak chcete, aby som vám ukázal ďalší text (ten, ktorý neexistuje), zmeňte / opt / na akýkoľvek iný priečinok, ktorý vo vašom systéme neexistuje, napríklad: / asd /

Ako vidíte, -d nám pomáha zistiť, či adresár existuje, teraz, keď zmeníme -d na -f, je potrebné skontrolovať existenciu súborov (-d = adresár, -f = súbor / súbor)

Napríklad:

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

Tu je zoznam možností:

-d - »Skontrolujte, či existuje určitý adresár

-f - »Skontrolujte, či existuje určitý súbor

-w - »Skontrolujte, či má určitý súbor oprávnenie na zápis

-x - »Skontrolujte, či má určitý súbor oprávnenie na vykonávanie.

A tiež nie je veľa čo dodať 🙂

Viem, že to bude veľmi užitočné a zaujímavé pre tých, ktorí radi programujú v Bashi 😉

pozdravy


42 komentáre, nechajte svoj

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Hugo dijo

    Ďalším spôsobom, ako to urobiť, ak ... potom..iné:

    test -f /etc/hosts && elcomando

    Alebo tiež

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

    Atď.

    1.    KZKG ^ Gaara dijo

      Správne 😀
      ... O_O ... Ste Hugo, Hugo z Kuby? ... pomocou Windows8, WTF !!!

      1.    Hugo dijo

        Áno, oboznámil som sa s týmto OS a ak mám byť úprimný, jediná vec, ktorú som považoval za užitočnú, je správca kopírovania, inak mi osobne pripadá škodca, najmä jeho hybridné rozhranie a aplikácie metra. Páči sa mi menej ako Vista a 7 (aj keď o niečo efektívnejšie ako tieto), čo sa mi tiež nepáčilo. Všetko, čo to používam, je hrať NFS13 a Skyrim, ale tento OS zaberá toľko miesta, že som musel vymazať svoj linuxový oddiel [snif].

        Pre vašu duševnú pohodu vám však môžem povedať, že predvčerom som si stiahol Arch ISO na január a plánujem mu dať ochutnať jeho verziu x86-64, hneď ako dostanem repo (budete mať že? Teraz, keď som videl, že štandardne používa podpísané balíčky, mi dáva väčšiu istotu sa ponoriť.

        A môj otec mi tiež povedal, že mi pošle Sony Xperia, ktorú chcem využiť na to, aby som sa naučil programovať pre Android, čo bolo čakajúcim želaním. Takže sa upokojte, ešte som nešiel na temnú stránku sily, buahahahaha 😉

  2.   patz dijo

    mužský test

    1.    MSX dijo

      Iste.

  3.   RAW-Basic dijo

    Wenas! ..

    Mohli by sme vytvoriť ten istý .. .. ale adresár sa odovzdá ako parameter ..

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

    A hovoríme tomu ako:

    ./test.sh / opt /

    Pozdravujem ..

  4.   uložiť dijo

    IF nie je cyklus xD

  5.   Gregory meče dijo

    Hodí sa mi to ako rukavice pre scenár, ktorý robím. Je platné používať zástupné znaky? Napríklad vedieť, či existuje súbor .mp4, potom na nich niečo spustiť.

    ak [-f * .mp4];
    ...

    1.    RAW-Basic dijo

      Áno, je to úplne platné ..

      Aj cez parametre .. „* .mp4“

      1.    RAW-Basic dijo

        Napr

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

        Ak to nazvete: ./test.sh * .mp4

        Ak nájde súbory .mp4, vymaže ich ... ... ale nezobrazí zoznam súborov v tomto adresári ...

        1.    Gregory meče dijo

          Ďakujeme za spätnú väzbu a tipy! 🙂

        2.    Joaquin dijo

          Zmeškali ste f xD

          rm -rf $ 1

          To je vzrušujúcejšie!

        3.    b1tblu3 dijo

          Úžasné !!!, Každý deň, keď sa viac zamilovávam do systému Linux, bol systém Windows zaradený do nejakého temného kúta môjho pevného disku, ktorý sa čoskoro vymaže, aby ustúpil svetlu Linuxu.

          1.    RAW-Basic dijo

            Vynikajúce! .. .. potom urobte ďalší krok .. a choďte von ..

            Pred 6 mesiacmi cca. Na všetkých svojich počítačoch mám iba GNU / Linux a nepotrebujem viac .. .. nie W $ .. alebo víno .. ..a som z toho viac ako šťastný ..

            A infikujem svoje okolie .. keďže ma každý vidí so svojím Archom, rýchly, efektívny a šťastný .. ..a požiadajú ma o inštaláciu Linuxu .... jo! .. 😀

        4.    Inukaze dijo

          Tiež im môžete skontrolovať rôzne prípony, môžete použiť niečo ako

          #! / Bin / bash
          Adresár = $ HOME / Súbory na stiahnutie

          if [$ Directory]; potom
          echo "Tu je zoznam typov súborov:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          použitie {} vám umožňuje určiť viac rozšírení, v takom prípade použitie „?“ , je zástupný znak, ktorý umožňuje vziať „ľubovoľný znak“.

          Dúfam, že vám to pomôže

        5.    pedro dijo

          Odporúčam príkaz find [adresár] [search_pattern] –exec [príkaz] {} \

      2.    Carlos dijo

        To nefunguje, vložil som tieto súbory do adresára:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        hľadať.sh

        #! / Bin / bash
        CESTA = / tmp / TEST
        cd $ TRASA
        ls -la | awk '{print »« $ 9}'
        ak [[-f AB.TXT]]; potom
        echo »Zadajte IF, ak existuje AB
        .TXT "
        fi
        ak [-f AB20160422.TXT]; potom
        echo "vstup pre konkrétny súbor AB"
        fi

        keď dám [-f AB.TXT] dáva chybu
        keď som dal [[-f AB
        .TXT]] nedáva chybu, ale nemôže nájsť súbor
        funguje to iba vtedy, keď vložím konkrétny súbor, napríklad:
        ak [-f AB20160422.TXT]; potom

        Nemôžem to dostať do práce so zástupnými znakmi * alebo?

        1.    pedro dijo

          #! / usr / bin / env bash
          #.kódovanie = utf-8.

          OBSAHUJÚCI

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1 m»
          NC = »\ 033 [0 m»
          ČERVENÉ = »\ 033 [31 m»

          ak [! „$ 1“];
          potom
          echo "chýba parameter"
          výstup $ EXIT_BAD
          fi

          cd „$ 1“

          súbory = »ls -h1 $ 1»

          pre súbor v $ ($ súbory); robiť
          echo -e "so súborom $ BOLD $ $ nc môžete robiť čokoľvek"
          vykonané

          opustiť $ EXIT_OK

  6.   MSX dijo

    @KZ, povedzte o tom viac: „A to preto, že vstupujem do úžasného sveta Pythonu“!

    1.    KZKG ^ Gaara dijo

      HAHAHAHA nah ... kúsok po kúsku 🙂
      V Pythone som stále iba nováčik, ťažko mu mám čas venovať hodiny a hodiny, takže som pomalý áno, pomalý, ale istý v učení 😀

  7.   audoban dijo

    Ďakujem pekne 😀 práve včera som uvažoval, ako na to.

  8.   ríšsky dijo

    toto s ncurses je super 🙂

  9.   Jazeco dijo

    jedným slovom ... VÝBORNÁ!
    Dlho som zdokonaľoval skript na stiahnutie z Internetu, ale mal som problém, že stiahne súbory, ktoré som požadoval 1 a znova bez toho, aby som mohol overiť existenciu 1ro.
    Veľmi dobrá tato.

  10.   zulan dijo

    Obrovský príspevok, tu z Čile sa cení.
    Každý deň ma LINUX príjemne prekvapuje,
    Nech žije slobodný softvér MIERDAAAA.

  11.   david dijo

    slúžiť pre
    skontrolujte, či je súbor z adresára

  12.   groveher dijo

    Ak chcem skontrolovať existenciu ľubovoľného súboru v ceste «/ tmp / receivers», vykonajte ľubovoľný príkaz, aký by bol?

    Budem velmi vdacna

    pozdravy

  13.   John dijo

    Vážený / -á, a podľa IF určiť, či je súbor úplne vyplnený ???. Pýtam sa na to, pretože keď vypĺňate súbor na prenos, môže to trvať aj s polovičnými údajmi.

    Zdravím a ďakujem za odpoveď.

  14.   Inukaze dijo

    Myslím, že by ste mali pridať aj príklad, napríklad „Skontrolujte, či neexistuje napríklad„ súbor “alebo„ adresár “.

    skontrolovať, či NIE existuje, napríklad použiť premennú->

    Adresár

    #! / Bin / bash
    Adresár = »$ HOME / Testovací adresár»
    Súbor = »$ HOME / Testovací súbor»

    ak [! -d "$ Adresár"]; potom
    echo "Neexistuje žiadny $ Directory"
    echo "Vytváranie ->" $ Adresár "
    mkdir "$ Directory"
    inak
    echo "Adresár" $ Directory "už existuje
    fi

    ak [! -d "$ Súbor"]; potom
    echo "Súbor $ neexistuje"
    echo "Vytváranie ->" $ Súbor "
    dotknite sa „$ súboru“
    inak
    echo "Súbor" $ Súbor "už existuje
    fi

    1.    Katekyo dijo

      keď urobíte mkdir, skontrolujte neskôr, či ho terminál dokáže vytvoriť, pretože môže rozbiť gule, ak ide o priečinok ako root alebo systém hhah

  15.   Julius vinachi dijo

    Zdravím KZKG ^ Gaara dotaz, ako by som urobil, keby som použil curl. Chcel by som vedieť, ako postupujem od konzoly po ping adresy URL, aby som zistil, či je napríklad dostupná http://portal.com/directorio/archivo1.php kde file1 bude ukladať ip návštev je na sledovanie tímu, ktorý potrebujem urobiť tento pin každú pol hodinu, aby som si bol vedomý verejného ip, pretože sa to čas od času mení a nemôžem sa pripojiť pomocou ssh .

    Pozdravujem vás vopred, Boh vám žehnaj.

    1.    KZKG ^ Gaara dijo

      Ahoj, ako to ide

      Najprv musíte povedať, že napríklad premenná IP je obsahom tohto súboru, musíte:
      1. Stiahnite súbor
      2. Prezrite si jeho obsah a odtiaľ získajte adresu IP
      3. Táto IP je premenná

      Napríklad:
      Tu stiahneme súbor - »wget http://portal.com/directorio/archivo1.php -o súbor.html
      Potom priradíme premennej jej obsah: - »: $ {IP: =` mačací súbor.html`}
      .. za predpokladu, že obsah tohto súboru má iba IP, ak nie, museli by ste pracovať s grep, awk alebo head.

      Keď už máte IP ako premennú, zvyšok je najjednoduchšia vec na svete 🙂

      Si quieres me escribes al email (kzkggaara[at]desdelinux[dot]net) que con gusto te ayudo

      1.    Julius vinachi dijo

        Ďakujem pekne kzkggaara veľmi vďačný.

  16.   natalia dijo

    Dobrý deň, veľmi nerozumiem výpočtovej technike a neviem, či táto položka súvisí s problémom, ktorý mám.

    Komentujem pre prípad, že ma budete čítať, aj keď je príspevok spred roka:
    Ukazuje sa, že som na pracovnej ploche vytvoril priečinok na ukladanie niektorých videí. Tieto videá som odstránil, pretože som ich už nepotreboval a teraz mi tento priečinok hovorí, že neexistuje (aj keď je viditeľný na pracovnej ploche).

    - Toto je prvý problém, ktorý mám:
    Priečinok nemôžem odstrániť.

    - Druhý problém a myslím si, že dôležitejší:
    Pri pokuse o odstránenie priečinka som vložil priečinok FOTKY. Teraz, keď otvorím priečinok, ktorý „neexistuje“, je prázdny a FOTKY tu nie sú.

    Ako môžem obnoviť fotografie? Dal som možnosť v priečinku „Zobraziť skryté dokumenty“, ale priečinok FOTKY sa nezobrazí.

    Dúfam, že budete vedieť, ako je to vyriešené.
    Ďakujem.

    1.    Valdo dijo

      Existujú dvaja používatelia, ktorí sú hlavnými: root a your_user (napríklad natalia). Obaja majú osobné priečinky. your_user in / home a root in / (root directory). Kliknutím pravým tlačidlom myši na priečinok zobrazíte, komu patrí. Ak je rootom vášho správcu súborov pomocou sudo alebo gksu alebo kdesu v závislosti od použitého prostredia, choďte do koreňového adresára -> root -> Desktop a pravdepodobne nájdete fotografie a priečinok môžete odstrániť. Niektoré distribúcie, keď nie ste vlastníkom súboru alebo adresára a nemáte prístupové oprávnenia, vám hovoria, že adresár / súbor neexistujú. Ak ste vlastníkom a nie ste root, urobte to isté so správcom súborov pomocou sudo atď. Prejdite do koreňového adresára -> / home -> personal_folder -> Desktop a skontrolujte, či tam sú fotografie a či môžete priečinok odstrániť.
      Ak to nefunguje, budete si musieť z terminálu (konzoly) pozrieť ďalšie možnosti.

  17.   Pedro Manuel Aguayo Munoz dijo

    Ahojte, ako sa máte? Robím prácu v bashe a chcel by som vedieť, ako overiť, či je napríklad zadaný adresár z klávesnice

    #! / Bin / bash
    prečítať trasu
    #Enter ~ / Desktop
    # Potom sa pokúsim navigovať v tomto adresári
    cesta cd $
    # Dostanem nasledujúcu správu typu bash: cd: ~ / Desktop: Súbor alebo adresár neexistuje

    Moja otázka je, čo môžem urobiť, aby som to zadal z klávesnice a zobral to ako cestu k adresáru?

  18.   Miguel dijo

    A ako môžem zistiť, či existuje skupina,

  19.   uprataný dijo

    dobrý, mám problém v mojej canaime, keď stlačím tlačidlo cunaguaro, hovorí, že neexistuje žiadny súbor alebo adresár, ako by to bolo pri riešení tohto problému, a zvyšok neotvára cunaguaro, ďakujem

  20.   Carlos dijo

    Ako urobíte if v BASH, ak má názov súboru medzery?
    Napríklad:
    Apríl data.xlsx

    Spýtať sa, či súbor existuje

    1.    Manuel Alcocer Jimenez dijo

      Carlos, takto:

      if [["$ variable" == Údaje \ mesiac \ z \ April.xlsx]]; potom zopakujte „match“; fi

      Môžete tiež:
      if [["$ variable" == 'Údaje za mesiac April.xlsx']]; potom zopakujte „match“; fi

      Ďalšia možnosť:
      [["" Variabilita $ "== 'Údaje za apríl.xlsx']] && echo 'zápasy' || ozvena „sa nezhoduje“

      V niektorých tmavých oblastiach internetu odporúčajú namiesto [] použiť [[]], a ak sa chystáte porovnávať čísla, potom: ((premenná> = 3)) && echo 'premenná je väčšia alebo rovná 3' | | premenná echo 'je menšia ako 3'

      Preto pre čísla:

      if ((číslo! = 4)); potom echo "$ {number} nie je 4"; else echo "$ {number} je 4"; fi

  21.   César Mateus dijo

    ako môžete vytvoriť kód na overenie, či má adresár konkrétny text, aby ste ho mohli upravovať.

    príklad:

    if (text1)

    nerob nič

    inak

    zmeniť text1 na text2

  22.   Miguel dijo

    Otázka, aké by to bolo pre mňa každých 15 sekúnd skontrolovať, či súbor existuje alebo nie, ďakujem.

  23.   riečny breh dijo

    Dobrý deň,
    toto:
    if [-w / home / Komun / Logs / ti]; potom
    Zistite, či je do súboru zapisovateľný. Je to však založené na oprávneniach používateľov. Dá sa to zistiť, či má skupina alebo ostatní oprávnenie?