Provjerite postoji li datoteka ili mapa (ili više) s IF petljom

Nisam stavio ništa od toga bash, a to je da sam dok ulazim u čudesni svijet Pythona pomalo zaboravio na ovog drugog prijatelja koji mi je toliko pomogao 🙂

Ovdje sam stavio nešto za Bash entuzijaste, kao što naslov kaže ... Pokazat ću vam kako provjeriti postoji li datoteka ili mapa u sistemu, samo koristeći: if

Stvorit ćemo .sh datoteku i dati joj dozvole za izvršenje, za to samo stavite sljedeću naredbu u terminal:

dodirni test.sh && chmod + x test.sh

Ovo što je uradio je stvoriti datoteku (dodirni test.sh) i takođe vam daju dozvole za izvršenje (chmod + x test.sh)

Onda napišimo u njega sljedeće:

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

Šta ovo znači?

Jednostavno 😀

U prvom redu - » ako je [-d / opt /];

Ovdje se pitamo, postoji li / opt / direktorij? Da direktorij / mapa, jer -d označava direktorij ili mapu.
Tada, ako postoji, ispisat ćemo u terminalu «Da, postoji.»(Ovo su redovi 2 i 3)
U suprotnom i / opt / NE postoji, tada ćemo ispisati «Ne, ne postoji»(Redovi 4 i 5)
Zatim u posljednjem redu (broj 6) zatvorimo if i to je to.

Vezani članak:
Uspostavite mrežnu vezu između računara i Virtualbox virtualnih mašina

Napravite test, on će vam pokazati da / opt / postoji.

Ako želite da vam pokažem drugi tekst (onaj koji ne postoji), promijenite / odlučite / za bilo koju drugu mapu koja ne postoji u vašem sistemu, na primjer: / asd /

Kao što vidite, -d nam pomaže da znamo postoji li direktorij, pa ako sada promijenimo -d u -f, provjerit ćemo postojanje datoteka (-d = direktorij, -f = datoteka / datoteka)

Na primjer:

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

Evo liste opcija:

-d - »Provjerite postoji li određeni direktorij

-f - »Provjerite postoji li određena datoteka

-w - »Provjerite ima li određena datoteka dozvolu za pisanje

-x - »Provjerite ima li određena datoteka dozvole za izvršenje.

I dobro, nema se još puno dodati 🙂

Znam da će ovo biti vrlo korisno i zanimljivo onima koji vole programirati na Bashu 😉

Saludos


Sadržaj članka pridržava se naših principa urednička etika. Da biste prijavili grešku, kliknite ovdje.

42 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena.

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   hugo rekao je

    Drugi način da to učinite bez ako ... onda..else:

    test -f /etc/hosts && elcomando

    Ili takođe

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

    Itd.

    1.    KZKG ^ Gaara rekao je

      Tačno 😀
      … O_O… Jesi li ti Hugo, Hugo sa Kube? … Koristeći Windows8, WTF !!!

      1.    hugo rekao je

        Pa da, upoznajem se s ovim OS-om i ako moram biti iskren, jedino što mi se učinilo korisnim je upravitelj kopiranja, inače lično smatram da to muči, posebno njegov hibridni interfejs i metro aplikacije. Sviđa mi se manje od Viste i 7 (doduše nešto efikasnije od ovih), što se ni meni nije svidjelo. Sve za što ga koristim je da igram NFS13 i Skyrim, ali ovaj OS zauzima toliko prostora da sam morao izbrisati svoju Linux particiju [snif].

        Međutim, radi vašeg mira, reći ću vam da sam prekjučer preuzeo Arch Arch za januar i planiram ga probati u verziji x86-64, čim dobijem repo (hoćete li ga dobiti?). Sad kad vidim da po defaultu koristi potpisane pakete, daje mi više samopouzdanja za ronjenje.

        Otac mi je također rekao da će mi poslati Sony Xperiju, koju želim iskoristiti da naučim programiranje za Android, što je bila čekanje na želju. Tako se smiri, još nisam otišao na tamnu stranu sile, buahahahaha 😉

  2.   patz rekao je

    test čoveka

    1.    MSX rekao je

      Naravno.

  3.   RAW-Basic rekao je

    Wenas! ..

    Mogli bismo napraviti isti .. ..ali direktorij se prosljeđuje kao parametar ..

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

    I nazivamo ga kao:

    ./test.sh / opt /

    Pozdrav ..

  4.   savo rekao je

    AKO nije ciklus xD

  5.   Gregory Swords rekao je

    Odgovara mi poput rukavice za scenario koji radim. Da li je valjano koristiti zamjenske znakove? Na primjer, da biste saznali postoje li .mp4 datoteke, pokrenite nešto na njima.

    ako je [-f * .mp4];
    ...

    1.    RAW-Basic rekao je

      Da, potpuno vrijedi ..

      Čak i kroz parametre .. "* .mp4"

      1.    RAW-Basic rekao je

        Na primjer,

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

        Ako ga pozovete: ./test.sh * .mp4

        Ako pronađe .mp4 datoteke, briše ih .. ..ali ne navodi datoteke u tom direktoriju ..

        1.    Gregory Swords rekao je

          Hvala na povratnim informacijama i savjetima! 🙂

        2.    Joaquin rekao je

          Promašili ste f xD

          rm -rf $ 1

          Ovo je uzbudljivije!

        3.    b1tblu3 rekao je

          Predivno !!!, Svakim danom kada se sve više zaljubljujem u Linux, Windows je prebačen u neki mračni kutak mog tvrdog diska, koji će se uskoro izbrisati kako bi ustupio mjesto svjetlu Linuxa.

          1.    RAW-Basic rekao je

            Izvrsno! .. ..potom napravite sljedeći korak .. i izvadite ga ..

            Prije 6 mjeseci Na svim svojim mašinama imam samo GNU / Linux i ne treba mi više .. ..ne W $ .. ili Wine .. ..i ja sam više nego sretan .. 😉

            A ja zaražavam svoju okolinu .. budući da me svi vide s mojim Archom, brzim, efikasnim i sretnim .. ..i traže od mene da instaliram Linux .. .. da! .. ..

        4.    Inukaze rekao je

          Možete ih provjeriti i za različita proširenja, možete koristiti nešto poput

          #! / bin / bash
          Direktorij = $ HOME / Preuzimanja

          if [$ direktorij]; onda
          echo "Evo popisa vrsta datoteka:"
          eho "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          pomoću {} omogućava vam da odredite više ekstenzija u ovom slučaju, koristeći "?" , je zamjenski znak, koji vam omogućava da uzmete "Bilo koji znak".

          Nadam se da će vam pomoći

        5.    pedro rekao je

          Preporučujem naredbu find [direktorij] [obrazac_pretrage] –exec [naredba] {} \

      2.    Carlos rekao je

        Ne radi, stavio sam ove datoteke u direktorij:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / bin / bash
        PUT = / tmp / TEST
        cd $ RUTA
        ls -la | awk '{ispis »« $ 9} »
        ako je [[-f AB.PORUKA]]; onda
        echo »Unesite IF ako postoji AB
        .PORUKA "
        fi
        ako [-f AB20160422.TXT]; onda
        echo "ulaz za određenu AB datoteku"
        fi

        kada stavim [-f AB.TXT] daje grešku
        kad stavim [[-f AB
        .TXT]] ne daje grešku, ali ne može pronaći datoteku
        to funkcionira samo kad stavim određenu datoteku, na primjer:
        ako [-f AB20160422.TXT]; onda

        Ne mogu ga natjerati da radi sa zamjenskim znakovima * ili?

        1.    pedro rekao je

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

          NADZORNICI

          EXIT_OK = 0
          EXIT_BAD = 66

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

          ako [! "$ 1"];
          onda
          echo "nedostaje parametar"
          izađi $ EXIT_BAD
          fi

          cd "$ 1"

          files = »ls -h1 $ 1»

          za datoteku u $ ($ files); učiniti
          echo -e "ovdje možete učiniti sve sa $ BOLD $ file $ nc"
          done

          izađi $ EXIT_OK

  6.   MSX rekao je

    @KZ, reci više o ovome: "i to zato što ulazim u čudesni svijet Pythona"!

    1.    KZKG ^ Gaara rekao je

      HAHAHAHA ne ... malo po malo 🙂
      Još uvijek sam tek početnik u Pythonu, teško da imam vremena posvetiti mu sate i sate, pa sam spor da, spor, ali siguran u učenju 😀

  7.   audoban rekao je

    Puno vam hvala 😀 baš jučer sam razmišljao kako to učiniti.

  8.   ReichSk rekao je

    ovo s ncurses je super 🙂

  9.   Jazeco rekao je

    jednom riječju ... ODLIČNO!
    Dugo sam usavršavao skriptu za preuzimanje s Interneta, ali imao sam problem što je preuzimao datoteke koje je tražio 1 i opet bez mogućnosti provjere postojanja 1ro.
    Vrlo dobar tuto.

  10.   zulan rekao je

    Ogroman doprinos, ovdje iz Čilea se cijeni.
    Svaki dan me više LINUX ugodno iznenadi,
    Živio besplatni softver MIERDAAAA.

  11.   David rekao je

    služiti za
    provjerite je li datoteka iz direktorija

  12.   Grovher rekao je

    Ako želim provjeriti postojanje bilo koje datoteke na putu «/ tmp / prijemnici», izvršite bilo koju naredbu, kako bi to bilo?

    Biću vam vrlo zahvalan

    Saludos

  13.   Huan rekao je

    Poštovani, i da pomoću IF utvrdim je li datoteka u potpunosti popunjena ???. To pitam jer kad ispunjavate datoteku za prijenos, može je uzeti čak i s pola podataka.

    Pozdrav i hvala na odgovoru.

  14.   Inukaze rekao je

    Pa mislim da biste trebali dodati i primjer, kao što je "Provjerite da ne postoji" "datoteka" ili "direktorij" kao na primjer

    kako biste provjerili da NE postoji, na primjer koristite varijablu->

    Direktorij

    #! / bin / bash
    Direktorij = »$ HOME / Test direktorij»
    Datoteka = »$ HOME / Probna datoteka»

    ako [! -d "$ direktorij"]; onda
    echo "Nema $ direktorija"
    echo "Stvaranje ->" $ direktorij "
    mkdir "$ direktorij"
    drugo
    echo "Direktorij" $ direktorij "već postoji
    fi

    ako [! -d "$ datoteka"]; onda
    echo "Datoteka $ ne postoji"
    echo "Stvaranje ->" $ datoteka "
    dodirnite "$ File"
    drugo
    echo "Datoteka" $ File "već postoji
    fi

    1.    Katekyo rekao je

      kad kasnije provjerite mkdir da li bi ga terminal mogao stvoriti jer može razbiti kuglice ako je to mapa kao root ili sistem hhah

  15.   Julius vinachi rekao je

    Pozdrav KZKG ^ Gaara upit kao što bih to učinio da koristim curl. Volio bih znati kako radim od konzole do pinga URL-a da vidim je li dostupan, na primjer http://portal.com/directorio/archivo1.php Tamo gdje će file1 čuvati IP adrese posjeta, za nadgledanje tima trebam napraviti taj pin svakih pola sata kako bih bio svjestan javnog IP-a jer se s vremena na vrijeme mijenja i ne mogu se povezati ssh-om .

    Pozdrav hvala unaprijed Bog vas blagoslovio.

    1.    KZKG ^ Gaara rekao je

      Zdravo, kako ide

      Prvo, morate reći da je IP varijabla (na primjer) sadržaj te datoteke, za to morate:
      1. Preuzmite datoteku
      2. Pogledajte njegov sadržaj i odatle nabavite IP
      3. Taj IP je varijabla

      Na primjer:
      Ovdje preuzimamo datoteku - »wget http://portal.com/directorio/archivo1.php -o fajl.html
      Zatim dodijelimo varijabli njen sadržaj: - »: $ {IP: =` cat file.html`}
      .. pod pretpostavkom da sadržaj te datoteke ima samo IP, ako ne, morat ćete raditi s grep, awk ili head.

      Jednom kada već imate IP kao varijablu, ostalo je najjednostavnija stvar na svijetu 🙂

      Ako želite, napišite mi na e-mail (kzkggaara [at] desdelinux [dot] net) da ću vam rado pomoći

      1.    Julius vinachi rekao je

        Veliko hvala kzkggaara vrlo zahvalan.

  16.   Natalia rekao je

    Bok, ne razumijem se puno u računarstvo i ne znam je li ovaj post povezan s problemom koji imam.

    Komentiram u slučaju da me pročitate, iako je objava od prije godinu dana:
    Ispada da sam na radnoj površini stvorio mapu za čuvanje nekih video zapisa. Pa, izbrisao sam te videozapise jer mi više nisu trebali, a sada mi ovaj folder govori da ne postoje (iako su vidljivi na mojoj radnoj površini).

    - To je prvi problem koji imam:
    Ne mogu izbrisati mapu.

    - Drugi problem i mislim da je važniji:
    U pokušaju da izbrišem mapu, stavio sam mapu FOTOGRAFIJE. Sada kada otvorim mapu koja "ne postoji", prazna je i FOTOGRAFIJE nisu tamo.

    Kako mogu povratiti fotografije? Dao sam opciju unutar mape "Prikaži skrivene dokumente", ali mapa FOTOGRAFIJE se ne pojavljuje.

    Nadam se da možete znati kako se to rješava.
    Hvala.

    1.    valdo rekao je

      Dva su glavna korisnika: root i your_user (natalia na primjer). Oboje imaju lične fascikle. vaš_korisnik u / home i root u / (root direktorij). Klikom desnog klika na mapu pogledajte kome pripada. Ako je root sa vašim upraviteljem datoteka koristeći sudo ili gksu ili kdesu, ovisno o okruženju koje koristite, idite u korijenski direktorij -> root -> Desktop i vjerojatno ćete pronaći fotografije i možete izbrisati mapu. Neke distribucije kada niste vlasnik datoteke ili direktorija i nemate dozvole za pristup kažu vam da direktorij / datoteka ne postoji. Ako ste vlasnik, a niste root, učinite isto s upraviteljem datoteka sa sudo, itd. I idite u osnovni direktorij -> / home -> personal_folder -> Desktop i provjerite jesu li fotografije tu i možete li mapu izbrisati.
      Ako ovo ne uspije, morat ćete vidjeti ostale opcije s terminala (konzole).

  17.   Pedro Manuel Aguayo Munoz rekao je

    Bok, kako ste? Radim posao u bashu i želio bih znati kako provjeriti postoji li direktorij koji se unosi s tipkovnice, na primjer

    #! / bin / bash
    pročitajte rutu
    #Enter ~ / Desktop
    # Tada pokušam navigirati tim direktorijumom
    cd $ putanja
    # Dobivam sljedeću bash poruku: cd: ~ / Desktop: Datoteka ili direktorij ne postoji

    Moje pitanje je, što mogu učiniti tako da ga unesem s tipkovnice i uzmem kao put direktorija?

  18.   Miguel rekao je

    I kako mogu znati postoji li grupa,

  19.   heidi rekao je

    dobro Imam problem u kanamu kad pritisnem tipku cunaguaro, piše da ne postoji datoteka ili direktorij kao što bi to učinio da riješi taj problem, a ostalo se ne otvara cunaguaro, molim hvala.

  20.   Carlos rekao je

    Kako se radi ako u BASH-u ako naziv datoteke ima razmake?
    Na primjer:
    April data.xlsx

    Da biste pitali postoji li datoteka

    1.    Manuel Alcocer Jimenez rekao je

      Carlos, ovako:

      ako [["$ varijabla" == Podaci \ mjesec \ od \ aprila.xlsx]]; zatim odjek 'podudaranje'; fi

      Takođe možete:
      if [["$ variable" == 'Podaci za april.xlsx']]; zatim odjek 'podudaranje'; fi

      Druga opcija:
      [["$ Variable" == 'Podaci za april.xlsx']] && echo 'podudaranja' || eho 'se ne podudara'

      U nekim mračnim područjima Interneta preporučuju upotrebu [[]] umjesto [], a ako ćete upoređivati ​​brojeve tada: ((varijabla> = 3)) && echo 'varijabla je veća ili jednaka 3' || echo 'varijabla je manja od 3'

      Stoga, za brojeve:

      if ((broj! = 4)); tada eho "$ {broj} nije 4"; inače jeka "$ {broj} je 4"; fi

  21.   Cesar Matheus rekao je

    kako možete napraviti kod za provjeru valjanosti ako direktorij ima određeni tekst, kako biste ga mogli uređivati.

    primer:

    ako (text1)

    ne raditi ništa

    drugo

    promijenite text1 u text2

  22.   Miguel rekao je

    pitanje, kako bi bilo provjeravati svakih 15 sekundi postoji li datoteka ili ne, hvala.

  23.   obala rijeke rekao je

    zdravo,
    ovo:
    if [-w / home / Komun / Logs / ti]; onda
    Otkrijte da li je u datoteku moguće zapisati. Ali zasniva se na korisničkim dozvolama. Može li se to učiniti kako bi se saznalo da li grupa ili ostali imaju dozvole?