Suriin kung may isang file o folder na mayroon o hindi (at higit pa) na may IF loop

Wala akong inilagay kahit ano Malakas na palo, at ito ay habang papasok ako sa kahanga-hangang mundo ng Python nakalimutan ko ng kaunti ang tungkol sa ibang kaibigan na tumulong sa akin ng sobra 🙂

Dito inilagay ko ang isang bagay sa mga mahilig sa Bash, tulad ng sinasabi ng pamagat ... Ipakita ko sa iyo kung paano suriin kung mayroon o hindi ang isang file o folder sa system, ginagamit lamang ang: if

Lilikha kami ng isang .sh file at bibigyan ito ng mga pahintulot sa pagpapatupad, para sa ito ay sapat na upang ilagay ang sumusunod na utos sa isang terminal:

pindutin ang pagsubok.sh && chmod + x pagsubok.sh

Ang ginawa nito ay lumikha ng file (pindutin ang pagsubok.sh) at bibigyan ka rin ng mga pahintulot sa pagpapatupad (chmod + x test.sh)

Pagkatapos ay isulat natin ang mga sumusunod dito:

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

Ano ang ginagawa nito?

Simple 😀

Sa unang linya - » kung [-d / opt /];

Dito tinatanong namin, mayroon ba ang / opt / direktoryo? Oo direktoryo / folder, dahil ang -d nangangahulugang direktoryo o folder.
Pagkatapos kung sakaling mayroon ito mai-print namin sa terminal «Oo, mayroon ito.»(Ito ang linya 2 at 3)
Kung hindi man at / opt / ay HINDI umiiral, pagkatapos ay i-print namin «Hindi, wala ito»(Mga Linya 4 at 5)
Pagkatapos sa huling linya (numero 6) isinasara namin ang kung at iyon lang.

Kaugnay na artikulo:
Itaguyod ang koneksyon sa network sa pagitan ng PC at Virtualbox virtual machine

Gawin ang pagsubok, ipapakita sa iyo na mayroon / opt / umiiral.

Kung nais mong ipakita ko sa iyo ang iba pang teksto (ang isa na walang mayroon) baguhin / opt / para sa anumang iba pang folder na wala sa iyong system, halimbawa: / asd /

Tulad ng nakikita mo, -d tumutulong sa amin upang malaman kung mayroon ang direktoryo, ngayon din kung binago namin -d sa -f ito ay upang suriin ang pagkakaroon ng mga file (-d = direktoryo, -f = file / file)

Por ejemplo:

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

Narito ang listahan ng mga pagpipilian:

-d - »Suriin kung mayroon isang tiyak na direktoryo

-f - »Suriin kung mayroon isang tiyak na file

-w - »Suriin kung ang isang tiyak na file ay may mga pahintulot sa pagsusulat

-x - »Suriin kung ang isang tiyak na file ay may mga pahintulot sa pagpapatupad.

At mabuti wala nang magdagdag pa 🙂

Alam kong magiging kapaki-pakinabang at kawili-wili ito para sa mga nais magprogram sa Bash 😉

Regards


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Hugo dijo

    Isa pang paraan upang magawa ito nang hindi kung… kung ganon..else:

    test -f /etc/hosts && elcomando

    O kaya naman

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

    Atbp

    1.    KZKG ^ Gaara dijo

      Tama 😀
      … O_O… Ikaw ba si Hugo, Hugo mula sa Cuba? … Gamit ang Windows8, WTF !!!

      1.    Hugo dijo

        Sa gayon oo, pamilyar ako sa OS na ito at kung kailangan kong maging prangka, ang tanging bagay na nahanap kong kapaki-pakinabang ay ang tagapamahala ng kopya, kung hindi man ay personal kong nasasaktan ito, lalo na ang hybrid interface at mga application ng metro. Mas gusto ko ito kaysa sa Vista at 7 (kahit na medyo mas mahusay kaysa sa mga ito), na hindi ko rin nagustuhan. Ang tanging bagay na ginagamit ko lamang dito ay ang paglalaro ng NFS13 at Skyrim, ngunit ang OS na ito ay tumatagal ng labis na puwang na kinailangan kong tanggalin ang aking pagkahati sa Linux [snif].

        Gayunpaman, para sa iyong kapayapaan ng isip, sasabihin ko sa iyo na noong isang araw kahapon ay na-download ko ang Arch ISO para sa Enero at balak kong bigyan ito ng isang maliit na pagsubok sa x86-64 na bersyon nito, sa lalong madaling makuha ko ang repo (gusto mo ba mayroon ito?). Ngayon na nakita ko na gumagamit ito ng mga naka-sign na package bilang default, nagbibigay ito sa akin ng higit na kumpiyansa na sumisid.

        At sinabi din sa akin ng aking ama na magpapadala siya sa akin ng isang Sony Xperia, na nais kong gamitin upang malaman ang ilang mga programa para sa Android, na isang nakabinbing kahilingan. Kaya huminahon ka, hindi pa ako nakapunta sa madilim na panig ng puwersa, buahahahaha 😉

  2.   patz dijo

    pagsubok ng tao

    1.    msx dijo

      Oo naman.

  3.   Batas-Batayan dijo

    Wenas! ..

    Maaari naming gawin ang parehong isa .. ..pero ang direktoryo ay naipasa bilang isang parameter ..

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

    At tinawag namin itong bilang:

    ./test.sh / opt /

    Pagbati ..

  4.   iligtas dijo

    KUNG hindi isang ikot ng xD

  5.   Gregory Swords dijo

    Ito ay nababagay sa akin tulad ng isang guwantes para sa isang script na ginagawa ko. May bisa bang gumamit ng mga wildcard? Halimbawa, upang malaman kung mayroong anumang .mp4s pagkatapos magpatakbo ng isang bagay sa kanila.

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

    1.    Batas-Batayan dijo

      Oo, ganap itong may bisa ..

      Kahit sa pamamagitan ng mga parameter .. "* .mp4"

      1.    Batas-Batayan dijo

        Hal

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

        Kung tatawagin mo ito: ./test.sh * .mp4

        Kung mahahanap nito ang .mp4 na mga file tinatanggal ang mga ito .. ..pero hindi nito nakalista ang mga file sa direktoryong iyon ..

        1.    Gregory Swords dijo

          Salamat sa feedback at mga tip! 🙂

        2.    Joaquin dijo

          Na-miss mo ang f xD

          rm -rf $ 1

          Ito ay mas kapanapanabik!

        3.    b1tblu3 dijo

          Kahanga-hangang !!!, Araw-araw na mas nahuhulog ako sa Linux, ang Windows ay na-relegate sa ilang madilim na sulok ng aking Hard Drive, na malapit nang mabura upang magbigay daan sa ilaw ng Linux.

          1.    Batas-Batayan dijo

            Mahusay! .. ..tapos gawin ang susunod na hakbang .. at ilabas ito ..

            6 buwan ang nakalipas approx. Mayroon lamang akong GNU / Linux sa lahat ng aking machine at hindi ko na kailangan pa .. ..hindi W $ .. o Wine .. ..at mas masaya ako sa ganyan .. 😉

            At nahahawa ako sa aking paligid .. dahil nakikita ako ng lahat kasama ang aking Arch, mabilis, mahusay at masaya .. ..at hinihiling nila sa akin na i-install ang Linux .. ..yeah! .. 😀

        4.    Inukaze dijo

          Maaari mo ring suriin ang mga ito para sa iba't ibang mga extension, maaari mong gamitin ang isang bagay tulad ng

          #! / bin / bash
          Direktoryo = $ HOME / Mga Pag-download

          kung [$ Directory]; tapos
          echo "Narito ang isang Listahan ng Mga Uri ng File:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          Ang paggamit ng {} ay nagbibigay-daan sa iyo upang tukuyin ang maraming mga extension sa kasong ito, ang paggamit ng "?" , ay isang wildcard, na nagbibigay-daan sa iyo upang kumuha ng "Anumang Character".

          Sana makatulong ito sa iyo

        5.    Pedro dijo

          Inirerekumenda ko ang utos na hanapin ang [direktoryo] [search_pattern] –exec [utos] {} \

      2.    Carlos dijo

        Hindi ito gumagana, inilagay ko ang mga file na ito sa direktoryo:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        maghanap.sh

        #! / bin / bash
        PATH = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{print »« $ 9}'
        kung [[-f AB.TXT]]; tapos
        echo »Ipasok ang KUNG kung mayroong anumang AB
        .TXT »
        fi
        kung [-f AB20160422.TXT]; tapos
        echo "input para sa isang tukoy na file ng AB"
        fi

        nang mailagay ko [-f ABNagbibigay ng error ang .TXT]
        nang mailagay ko [[-f AB
        .TXT]] ay hindi nagbibigay ng isang error ngunit hindi mahanap ang file
        gagana lamang ito kapag naglagay ako ng isang tukoy na file, halimbawa:
        kung [-f AB20160422.TXT]; tapos

        Hindi ko ito magawang magtrabaho kasama ang mga wildcard * o?

        1.    Pedro dijo

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

          SUMASUNDAN

          EXIT_OK = 0
          EXIT_BAD = 66

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

          kung [! "$ 1"];
          pagkatapos
          echo "isang parameter ang nawawala"
          lumabas sa $ EXIT_BAD
          fi

          cd "$ 1"

          mga file = »ls -h1 $ 1»

          para sa file sa $ ($ mga file); gawin
          echo -e "maaari kang gumawa ng anumang bagay na may $ BOLD $ file $ nc dito"
          tapos

          lumabas sa $ EXIT_OK

  6.   msx dijo

    @KZ, sabihin pa tungkol dito: "at iyon ay dahil papasok ako sa kahanga-hangang mundo ng Python"!

    1.    KZKG ^ Gaara dijo

      HAHAHAHA nah ... unti unti 🙂
      Baguhan pa lamang ako kay Python, wala akong oras upang ilaan ito ng mga oras at oras, kaya't mabagal ako oo, mabagal ngunit sigurado sa aking pag-aaral 😀

  7.   audoban dijo

    Maraming salamat 😀 kahapon lang iniisip ko kung paano ito gawin.

  8.   reichsk dijo

    ito sa ncurses ay mahusay 🙂

  9.   Jazeco dijo

    sa 1 salita ... MAHAL!
    Sa loob ng mahabang panahon ay pinaperpekto ko ang isang script upang makagawa ng mga pag-download mula sa Internet, ngunit nagkaroon ako ng problema na na-download ang mga file na hiniling nito ng 1 at muli nang hindi magagawang mapatunayan ang pagkakaroon ng 1ro.
    Napakagandang tuto.

  10.   zulan dijo

    Napakalaking kontribusyon, dito mula sa Chile ay pinahahalagahan.
    Araw-araw higit pang LINUX kaaya-aya na sorpresa sa akin,
    Mabuhay ang Libreng Software MIERDAAAA.

  11.   david dijo

    maglingkod para sa
    suriin kung ang isang file ay mula sa isang direktoryo

  12.   Tagapagbigay dijo

    Kung nais kong suriin ang pagkakaroon ng anumang file sa isang landas «/ tmp / receivers», magpatupad ng anumang utos, paano ito?

    Lubos akong magpapasalamat

    Regards

  13.   John dijo

    Mahal, at upang matukoy ng KUNG kung ang file ay buong populasyon ???. Tinanong ko ito dahil kapag pinupunan mo ang file para sa isang paghahatid, maaari itong kunin kahit na sa kalahati ng data.

    Pagbati at salamat sa iyong pagtugon.

  14.   Inukaze dijo

    Sa tingin ko dapat ka ring magdagdag ng isang halimbawa, tulad ng "Suriin na walang" isang "file" o "direktoryo" tulad ng halimbawa

    upang suriin na HINDI ito umiiral, halimbawa gumamit ng variable->

    Isang Direktoryo

    #! / bin / bash
    Direktoryo = »$ HOME / Test Directory»
    File = »$ HOME / Test File»

    kung [! -d "$ Directory"]; tapos
    echo "Walang $ Directory"
    echo "Lumilikha ->" $ Directory "
    mkdir "$ Directory"
    iba
    mayroon nang echo na "Directory" $ Directory
    fi

    kung [! -d "$ File"]; tapos
    echo na "Walang file na $"
    echo "Lumilikha ->" $ File "
    pindutin ang "$ File"
    iba
    mayroon nang echo na "File" $ File
    fi

    1.    Katekyo dijo

      kapag ginawa mo ang mkdir suriin sa ibang pagkakataon kung maaaring likhain ito ng terminal dahil maaari nitong masira ang mga bola kung ito ay isang folder bilang ugat o system hhah

  15.   Julius vinachi dijo

    Pagbati KZKG ^ Gaara isang query na gusto kong gawin upang magamit ang curl. Nais kong malaman kung paano ko gagawin mula sa console hanggang sa ping ng isang url upang makita kung ito ay magagamit halimbawa http://portal.com/directorio/archivo1.php Kung saan itatago ng file1 ang mga pagbisita sa mga IP, para sa pagsubaybay sa isang koponan na kailangan kong gawin ang pin na iyon bawat kalahating oras upang magkaroon ako ng kamalayan sa pampublikong IP dahil nagbabago ito paminsan-minsan at hindi ako makakonekta sa pamamagitan ng ssh.

    Pagbati salamat sa iyo nang maaga Pagpalain ka ng Diyos.

    1.    KZKG ^ Gaara dijo

      Hi kung paano ito pupunta

      Una, kailangan mong sabihin na ang variable ng IP (halimbawa) ay ang nilalaman ng file na iyon, para dito kailangan mong:
      1. I-download ang file
      2. Tingnan ang nilalaman nito at kunin ang IP mula doon
      3. Ang IP na iyon ay ang variable

      Por ejemplo:
      Dito namin nai-download ang file - »wget http://portal.com/directorio/archivo1.php -o file.html
      Pagkatapos ay nagtatalaga kami ng variable ng nilalaman nito: - »: $ {IP: =` cat file.html`}
      .. Ipagpalagay na ang nilalaman ng file na iyon ay mayroong lamang IP, kung hindi, kakailanganin mong gumana sa grep, awk o ulo.

      Kapag mayroon ka nang IP bilang isang variable, ang natitira ay ang pinakasimpleng bagay sa mundo 🙂

      Kung gusto mo, sumulat sa akin sa pamamagitan ng email (kzkggaara[at]desdelinux[dot]net) Malugod kong tutulungan ka

      1.    Julius vinachi dijo

        Maraming salamat kzkggaara napaka nagpapasalamat.

  16.   Natalia dijo

    Kumusta, hindi ko masyadong maintindihan ang tungkol sa computing at hindi ko alam kung ang entry na ito ay nauugnay sa problemang mayroon ako.

    Magkomento ako kung sakaling basahin mo ako, kahit na ang post ay mula sa isang taon na ang nakakaraan:
    Lumikha pala ng isang folder sa aking desktop upang mag-imbak ng ilang mga video. Kaya, tinanggal ko ang mga video na iyon dahil hindi ko na sila kailangan at ngayon sinasabi sa akin ng folder na ito na wala ito (kahit na nakikita ito sa aking desktop).

    - Iyon ang unang problema na mayroon ako:
    Hindi ko matanggal ang folder.

    - Pangalawang problema at sa palagay ko mas mahalaga:
    Sa pagtatangkang tanggalin ang folder, naglagay ako ng isang folder na PHOTOS. Ngayon kapag binuksan ko ang folder na "hindi umiiral" walang laman ito at wala ang mga LARAWAN.

    Paano ko makukuha ang mga larawan? Nabigyan ko ang pagpipilian sa loob ng folder na "Ipakita ang mga nakatagong dokumento" ngunit ang folder na PHOTOS ay hindi lilitaw.

    Sana malaman mo kung paano ito malulutas.
    Salamat sa inyo.

    1.    valdo dijo

      Mayroong dalawang mga gumagamit na ang pangunahing mga: root at your_user (halimbawa ng natalia). Pareho silang may mga personal na folder. your_user in / home at root in / (root Directory). Sa pamamagitan ng pag-right click sa folder tingnan kung kanino ito kabilang. Kung ito ay ugat sa iyong file manager na gumagamit ng sudo o gksu o kdesu depende sa kapaligiran na ginagamit mo pumunta sa root Directory -> root -> Desktop at malamang mahahanap mo ang mga larawan at maaari mong tanggalin ang folder. Ang ilang mga distrito kapag hindi ikaw ang may-ari ng file o direktoryo at wala kang mga pahintulot sa pag-access ay nagsasabi sa iyo na wala ang direktoryo / file. Kung ikaw ang may-ari at hindi ka root, gawin ang pareho sa file manager na may sudo, atbp at pumunta sa root Directory -> / home -> personal_folder -> Desktop at tingnan kung ang mga larawan ay nandoon at kung maaari mong tanggalin ang folder.
      Kung hindi ito gagana, makikita mo ang iba pang mga pagpipilian mula sa terminal (console).

  17.   Pedro Manuel Aguayo Munoz dijo

    Kumusta, kumusta ka? Gumagawa ako ng isang trabaho sa bash at nais kong malaman kung paano i-verify kung may isang direktoryo na ipinasok mula sa keyboard, halimbawa

    #! / bin / bash
    basahin ang ruta
    # Ipasok ~ / Desktop
    #Tapos susubukan kong i-navigate ang direktoryong iyon
    cd $ path
    # Nakukuha ko ang sumusunod na bash message: cd: ~ / Desktop: Ang file o direktoryo ay wala

    Ang tanong ko, ano ang magagawa ko upang maipasok ko ito mula sa keyboard at dalhin ito bilang isang path ng direktoryo?

  18.   Miguel dijo

    At paano ko malalaman kung mayroon ang isang pangkat,

  19.   malinis dijo

    mabuti Mayroon akong problema sa aking canaima kapag pinindot ko ang pindutan na cunaguaro sinasabi nito na walang file o direktoryo tulad ng gagawin nito upang malutas ang problemang iyon at ang natitira ay hindi magbubukas ng cunaguaro mangyaring salamat.

  20.   Carlos dijo

    Paano mo gagawin ang kung sa BASH kung ang filename ay may puwang?
    Por ejemplo:
    Data ng Abril.xlsx

    Upang tanungin kung mayroon ang file

    1.    Manuel Alcocer Jimenez dijo

      Carlos, tulad nito:

      kung [["$ variable" == Data \ buwan \ ng \ April.xlsx]]; pagkatapos ay echo 'match'; fi

      Maaari mo ring:
      kung [["$ variable" == 'Data para sa buwan ng Abril.xlsx']]; pagkatapos ay echo 'match'; fi

      Isa pang pagpipilian:
      [["$ Variable" == 'Data para sa April.xlsx']] && echo 'match' || echo 'ay hindi tugma'

      Sa ilang madilim na lugar ng internet inirerekumenda nila ang paggamit ng [[]] sa halip na [], at kung ihahambing mo ang mga numero kung gayon: ((variable> = 3)) && echo 'variable ay mas malaki sa o katumbas ng 3' | | ang variable ng echo 'ay mas mababa sa 3'

      Samakatuwid, para sa mga numero:

      kung ((numero! = 4)); pagkatapos ay ang echo na "$ {number} ay hindi 4"; kung hindi man ang echo na "$ {number} ay 4"; fi

  21.   Cesar Matheus dijo

    Paano ka makakagawa ng isang code upang mapatunayan kung ang direktoryo ay may isang tukoy na teksto, upang mai-edit ito.

    Halimbawa:

    kung (text1)

    huwag gumawa

    iba

    baguhin ang text1 sa text2

  22.   Miguel dijo

    isang katanungan, paano ito suriin bawat 15 segundo kung mayroon ang file o hindi, salamat.

  23.   tabing-ilog dijo

    Hello,
    ito:
    kung [-w / home / Komun / Logs / ti]; tapos
    Alamin kung nakasulat ang file. Ngunit batay ito sa mga pahintulot ng gumagamit. Maaari bang magawa upang malaman kung ang grupo o ang iba pa ay may mga pahintulot?