Controleer of een bestand of map bestaat of niet (en meer) met IF-lus

Ik heb er niets van gedaan Slaan, en het is dat wanneer ik de wondere wereld van Python betreed, ik een beetje ben vergeten over deze andere vriend die me zo veel heeft geholpen 🙂

Hier leg ik iets voor Bash-enthousiastelingen, zoals de titel al zegt ... Ik zal je laten zien hoe je kunt controleren of een bestand of map in het systeem bestaat, gewoon met behulp van: if

We gaan een .sh-bestand maken en het uitvoeringsrechten geven, hiervoor is het voldoende om het volgende commando in een terminal te plaatsen:

touch test.sh && chmod + x test.sh

Wat dit deed, is het bestand maken (tik op test.sh) en geven u ook uitvoeringsrechten (chmod + x test.sh)

Laten we er dan het volgende in schrijven:

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

Wat doet dit?

Eenvoudig 😀

Op de eerste regel - » als [-d / opt /];

Hier vragen we, bestaat de / opt / directory? Ja directory / map, omdat het -d betekent directory of map.
Als het bestaat, zullen we afdrukken in de terminal «Ja, het bestaat.»(Dit zijn lijn 2 en 3)
Anders en / opt / bestaat NIET, dan zullen we afdrukken «Nee het bestaat niet»(Lijnen 4 en 5)
Dan sluiten we in de laatste regel (nummer 6) de if en dat is het.

Gerelateerd artikel:
Breng een netwerkverbinding tot stand tussen de pc en virtuele machines van Virtualbox

Doe de test, het zal je laten zien dat / opt / bestaat.

Als je wilt dat ik je de andere tekst laat zien (degene die niet bestaat), verander / kies / dan voor een andere map die niet in je systeem bestaat, bijvoorbeeld: / asd /

Zoals je kunt zien, helpt -d ons om te weten of de map bestaat, als we nu -d veranderen in -f, is het om het bestaan ​​van bestanden te controleren (-d = map, -f = bestand / bestand)

Bijvoorbeeld:

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

Hier is de lijst met opties:

-d - »Controleer of een bepaalde directory bestaat

-f - »Controleer of een bepaald bestand bestaat

-w - »Controleer of een bepaald bestand schrijfrechten heeft

-x - »Controleer of een bepaald bestand uitvoeringsrechten heeft.

En er is niet veel meer toe te voegen 🙂

Ik weet dat dit erg handig en interessant zal zijn voor degenen die graag in Bash 😉 programmeren

groeten


De inhoud van het artikel voldoet aan onze principes van redactionele ethiek. Klik op om een ​​fout te melden hier.

42 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd.

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Hugo zei

    Een andere manier om het te doen zonder als ... dan ... anders:

    test -f /etc/hosts && elcomando

    Of ook

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

    Enzovoort.

    1.    KZKG ^ Gaara zei

      Rechts 😀
      … O_O… Bent u Hugo, Hugo uit Cuba? … Met Windows8, WTF !!!

      1.    Hugo zei

        Nou ja, ik begin bekend te raken met dit besturingssysteem en als ik eerlijk moet zijn, is het enige dat ik nuttig heb gevonden de kopieerbeheerder, anders vind ik het persoonlijk vervelend, vooral de hybride interface en de metro-applicaties. Ik vind het minder leuk dan de Vista en de 7 (zij het een beetje efficiënter dan deze), die ik ook niet leuk vond. Het enige waar ik het voor gebruik is om NFS13 en Skyrim te spelen, maar dit besturingssysteem neemt zoveel ruimte in beslag dat ik mijn Linux-partitie [snif] moest verwijderen.

        Voor uw gemoedsrust zal ik u echter vertellen dat ik eergisteren de Arch ISO voor januari heb gedownload en ik ben van plan om het een kleine test te geven in zijn x86-64-versie, zodra ik de repo heb (wilt u heb het?). Nu ik zag dat het standaard ondertekende pakketten gebruikt, geeft het me meer vertrouwen om erin te duiken.

        En mijn vader vertelde me ook dat hij me een Sony Xperia zou sturen, waarvan ik wil profiteren om wat programmeren voor Android te leren, wat een hangende wens was. Dus kalmeer, ik ben nog niet naar de donkere kant van de kracht gegaan, buahahahaha 😉

  2.   patz zei

    man test

    1.    msx zei

      Tuurlijk.

  3.   RAW-Basic zei

    Wenas! ..

    We zouden dezelfde kunnen maken .. ..maar de map wordt doorgegeven als een parameter ..

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

    En we noemen het als:

    ./test.sh / opt /

    Groet..

  4.   eigen zei

    ALS is geen cyclus xD

  5.   Gregory Swords zei

    Het past mij als een handschoen voor een script dat ik doe. Is het geldig om jokertekens te gebruiken? Als u bijvoorbeeld wilt weten of er .mp4's zijn, voert u er iets op uit.

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

    1.    RAW-Basic zei

      Ja, het is volledig geldig ..

      Zelfs via parameters .. "* .mp4"

      1.    RAW-Basic zei

        Bv

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

        Als je het noemt: ./test.sh * .mp4

        Als het .mp4-bestanden vindt, worden ze verwijderd ... ... maar de bestanden in die map worden niet weergegeven ...

        1.    Gregory Swords zei

          Bedankt voor de feedback en tips! 🙂

        2.    Joaquin zei

          Je hebt de f xD gemist

          rm -rf $ 1

          Dit is spannender!

        3.    b1tblu3 zei

          Geweldig !!!, Elke dag word ik meer verliefd op Linux, Windows is gedegradeerd naar een donkere hoek van mijn harde schijf, die op het punt staat te worden gewist om plaats te maken voor het licht van Linux.

          1.    RAW-Basic zei

            Uitstekend! .. ..zet dan de volgende stap .. en haal het eruit ..

            6 maanden geleden ca. Ik heb alleen GNU / Linux op al mijn machines en ik heb niet meer nodig .. ..niet W $ .. of Wine .. ..en ik ben meer dan blij zo .. 😉

            En ik infecteer mijn omgeving .. aangezien iedereen me ziet met mijn Arch, snel, efficiënt en gelukkig .. ..en ze vragen me Linux te installeren .. ..ja! .. 😀

        4.    Inukaze zei

          Je kunt ze ook controleren op verschillende extensies, je kunt zoiets gebruiken

          #! / Bin / bash
          Directory = $ HOME / Downloads

          als [$ Directory]; vervolgens
          echo "Hier is een lijst met bestandstypen:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          met {} kunt u in dit geval meerdere extensies specificeren, het gebruik van "?" , is een jokerteken, waarmee u "Elk teken" kunt nemen.

          Ik hoop dat je leert

        5.    pedro zei

          Ik raad het commando find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos zei

        Het werkt niet, ik heb deze bestanden in de directory gezet:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / bash
        PAD = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{print »« $ 9}'
        als [[-f AB.TEKST]]; vervolgens
        echo »Voer de IF in als er een AB is
        .TEKST "
        fi
        if [-f AB20160422.TXT]; vervolgens
        echo "invoer voor een specifiek AB-bestand"
        fi

        toen ik [-f AB.TXT] geeft foutmelding
        toen ik [[-f AB
        .TXT]] geeft geen foutmelding maar kan het bestand niet vinden
        het werkt alleen als ik een specifiek bestand plaats, bijvoorbeeld:
        if [-f AB20160422.TXT]; vervolgens

        Ik kan het niet laten werken met jokertekens * of?

        1.    pedro zei

          #! / usr / bin / env bash
          #.codering = utf-8.

          CONTSTANTEN

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1m»
          NC = »\ 033 [0m»
          RED = »\ 033 [31m»

          als [! "$ 1"];
          harte
          echo "ontbreekt een parameter"
          verlaat $ EXIT_BAD
          fi

          cd "$ 1"

          bestanden = »ls -h1 $ 1»

          voor bestand in $ ($ bestanden); Doen
          echo -e "je kunt hier alles doen met $ BOLD $ file $ nc"
          gedaan

          verlaat $ EXIT_OK

  6.   msx zei

    @KZ, vertel hier meer over: "en dat komt omdat ik de wondere wereld van Python betreed"!

    1.    KZKG ^ Gaara zei

      HAHAHAHA nee ... beetje bij beetje 🙂
      Ik ben nog maar een nieuweling van Python, ik heb nauwelijks tijd om er uren en uren aan te besteden, dus ik ben traag, ja, traag maar zeker in mijn leerproces 😀

  7.   audoban zei

    Heel erg bedankt 😀 gisteren dacht ik na over hoe ik dit moest doen.

  8.   ReichSk zei

    dit met ncurses is geweldig 🙂

  9.   Jazeco zei

    in 1 woord… UITSTEKEND!
    Ik was lange tijd bezig met het perfectioneren van een script om downloads van internet te maken, maar ik werd geconfronteerd met het probleem dat het de bestanden downloadde waar het om vroeg 1 en opnieuw zonder het bestaan ​​van 1ro te kunnen verifiëren.
    Zeer goede tuto.

  10.   zulan zei

    Geweldige bijdrage, hier uit Chili wordt gewaardeerd.
    Elke dag verrast LINUX me aangenaam,
    Lang leve gratis software MIERDAAAA.

  11.   david zei

    dienen voor
    controleer of een bestand uit een directory komt

  12.   Grovher zei

    Als ik het bestaan ​​van een bestand in een pad «/ tmp / receivers» wil controleren, voer dan een commando uit, hoe zou dat zijn?

    ik zal heel dankbaar zijn

    groeten

  13.   John zei

    Beste, en om op IF te bepalen of het bestand volledig gevuld is ???. Ik vraag dit omdat wanneer u het bestand vult voor een verzending, het zelfs met de helft van de gegevens kan duren.

    Groeten en bedankt voor je reactie.

  14.   Inukaze zei

    Nou, ik denk dat je ook een voorbeeld moet toevoegen, zoals "Controleer of er geen" een "bestand" of "map" is, zoals bijvoorbeeld

    om te controleren of het NIET bestaat, gebruik bijvoorbeeld een variabele->

    Een directory

    #! / Bin / bash
    Directory = »$ HOME / Test Directory»
    File = »$ HOME / Testbestand»

    als [! -d "$ Directory"]; vervolgens
    echo "Er is geen $ Directory"
    echo "Creëren ->" $ Directory "
    mkdir "$ Directory"
    anders
    echo "Directory" $ Directory "bestaat al
    fi

    als [! -d "$ bestand"]; vervolgens
    echo "Bestand $ bestaat niet"
    echo "Creëren ->" $ Bestand "
    tik op "$ File"
    anders
    echo "File" $ File "bestaat al
    fi

    1.    Katekyo zei

      wanneer je de mkdir doet, controleer later of de terminal het kan maken, want het kan de ballen breken of het een map is als root of systeem hhah

  15.   Julius vinachi zei

    Groeten KZKG ^ Gaara een vraag zoals ik zou doen om curl te gebruiken. Ik zou graag willen weten hoe ik vanuit de console een url kan pingen om te zien of deze bijvoorbeeld beschikbaar is http://portal.com/directorio/archivo1.php Waar file1 de bezoek-IP's zal opslaan, is het voor het monitoren van een team dat ik die pin elk half uur moet maken, zodat ik op de hoogte ben van het openbare IP-adres, aangezien het van tijd tot tijd verandert en ik geen verbinding kan maken via SSH.

    Gegroet dank u bij voorbaat God zegene u.

    1.    KZKG ^ Gaara zei

      Hallo daar,

      Ten eerste moet je zeggen dat de IP-variabele (bijvoorbeeld) de inhoud van dat bestand is, hiervoor moet je:
      1. Download het bestand
      2. Bekijk de inhoud en haal daar het IP-adres op
      3. Dat IP is de variabele

      Bijvoorbeeld:
      Hier downloaden we het bestand - »wget http://portal.com/directorio/archivo1.php -o bestand.html
      Vervolgens wijzen we de inhoud van een variabele toe: - »: $ {IP: =` cat file.html`}
      .. ervan uitgaande dat de inhoud van dat bestand alleen het IP-adres heeft, anders zou u met grep, awk of head moeten werken.

      Als je het IP al als een variabele hebt, is de rest het eenvoudigste ter wereld 🙂

      Als je me wilt schrijven naar de e-mail (kzkggaara [at] desdelinux [dot] net) dat ik je graag zal helpen

      1.    Julius vinachi zei

        Heel erg bedankt kzkggaara erg dankbaar.

  16.   Natalia zei

    Hallo, ik begrijp niet veel van computergebruik en ik weet niet of dit bericht verband houdt met het probleem dat ik heb.

    Ik geef commentaar voor het geval je me leest, ook al is het bericht van een jaar geleden:
    Het blijkt dat ik een map op mijn bureaublad heb gemaakt om enkele video's op te slaan. Nou, ik heb die video's verwijderd omdat ik ze niet langer nodig had en nu vertelt deze map me dat het niet bestaat (ook al is het zichtbaar op mijn bureaublad).

    - Dat is het eerste probleem dat ik heb:
    Ik kan de map niet verwijderen.

    - Tweede probleem en ik denk dat belangrijker:
    In een poging de map te verwijderen, heb ik een map PHOTOS geplaatst. Als ik nu de map open die "niet bestaat", is deze leeg en zijn de FOTO'S er niet.

    Hoe kan ik de foto's herstellen? Ik heb de optie gegeven in de map "Verborgen documenten weergeven", maar de map FOTO'S verschijnt niet.

    Ik hoop dat je kunt weten hoe het is opgelost.
    Dank u.

    1.    valdo zei

      Er zijn twee gebruikers die de belangrijkste zijn: root en jouw_gebruiker (bijvoorbeeld natalia). Ze hebben allebei persoonlijke mappen. uw_gebruiker in / home en root in / (hoofdmap). Door met de rechtermuisknop op de map te klikken, kunt u zien van wie deze is. Als het root is met je bestandsbeheerder met sudo of gksu of kdesu, afhankelijk van de omgeving die je gebruikt, ga dan naar de root-directory -> root -> Desktop en je zult waarschijnlijk de foto's vinden en je kunt de map verwijderen. Sommige distributies als je niet de eigenaar bent van het bestand of de map en je geen toegangsrechten hebt, vertellen dat je map / bestand niet bestaat. Als je de eigenaar bent en niet de root, doe dan hetzelfde met de bestandsbeheerder met sudo, etc en ga naar de root directory -> / home -> personal_folder -> Desktop en kijk of de foto's er zijn en of je ze kunt verwijderen de map.
      Als dit niet werkt, moet u andere opties van de terminal (console) zien.

  17.   Pedro Manuel Aguayo Munoz zei

    Hallo, hoe gaat het? Ik doe een klus in bash en ik zou graag willen weten hoe ik kan controleren of er een map is ingevoerd via het toetsenbord, bijvoorbeeld

    #! / Bin / bash
    lees route
    # Voer ~ / Desktop in
    #Dan probeer ik door die map te navigeren
    cd $ pad
    # Ik krijg het volgende bash-bericht: cd: ~ / Desktop: het bestand of de directory bestaat niet

    Mijn vraag is, wat kan ik doen om het via het toetsenbord in te voeren en het als een mappad te beschouwen?

  18.   Miguel zei

    En hoe kan ik weten of er een groep bestaat,

  19.   heidi zei

    goed Ik heb een probleem in mijn canaima als ik op de knop cunaguaro druk, het zegt dat er geen bestand of map is zoals het zou doen om dat probleem op te lossen en de rest opent cunaguaro niet, dank je.

  20.   Carlos zei

    Hoe doe je de if in BASH als de bestandsnaam spaties heeft?
    Bijvoorbeeld:
    April data.xlsx

    Om te vragen of het bestand bestaat

    1.    Manuel Alcocer Jimenez zei

      Carlos, zoals dit:

      if [["$ variable" == Gegevens \ maand \ van \ april.xlsx]]; dan echo 'match'; fi

      U kunt ook:
      if [["$ variable" == 'Gegevens voor de maand april.xlsx']]; dan echo 'match'; fi

      Een andere optie:
      [["$ Variable" == 'Gegevens voor de maand april.xlsx']] && echo 'komt overeen met' || echo 'komt niet overeen'

      In sommige donkere delen van het internet raden ze aan om [[]] te gebruiken in plaats van [], en als je getallen gaat vergelijken, dan: ((variable> = 3)) && echo 'variabele is groter dan of gelijk aan 3' || echo 'variabele is kleiner dan 3'

      Daarom voor cijfers:

      if ((nummer! = 4)); dan echo "$ {number} is niet 4"; anders echo "$ {nummer} is 4"; fi

  21.   Cesar Matheus zei

    Hoe kun je een code maken om te valideren of de directory een specifieke tekst heeft, zodat je deze kunt bewerken.

    bijvoorbeeld:

    if (tekst1)

    niets doen

    anders

    verander text1 in text2

  22.   Miguel zei

    een vraag, hoe zou het zijn om elke 15 seconden te controleren of het bestand bestaat of niet, bedankt.

  23.   oever van de rivier zei

    Hallo,
    dit:
    als [-w / home / Komun / Logs / ti]; vervolgens
    Kijk of het bestand schrijfbaar is. Maar het is gebaseerd op gebruikersrechten. Kan het worden gedaan om erachter te komen of de groep of de anderen machtigingen hebben?