Comprovar si un arxiu o carpeta existeix o no (i més) amb cicle IF

Fa estona no poso res de xoc, I és que a l'estar endinsant-me en el meravellós món de Python he oblidat una mica a aquest altre amic que tant em va ajudar 🙂

Aquí els poso alguna cosa als entusiastes de Bash, com bé diu el títol ... els mostraré com comprovar si existeix o no un arxiu o carpeta en el sistema, només usant: if

Crearem un arxiu .sh i donar-li permisos d'execució, per a això només cal posar la següent comanda en un terminal:

touch prueba.sh && chmod + x prueba.sh

Això el que va fer és crear el fitxer (touch prova.sh) I més donar-li permisos d'execució (chmod + x prueba.sh)

Després escrivim el següent en ell:

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

Què fa això?

simple 😀

A la primera línia - » if [-d / opt /];

Aquí preguntem, hi ha el directori / opt /? Sí directori / carpeta, ja que el -d significa directori o carpeta.
Després en cas que existeixi imprimirem a la terminal «Sí, sí existeix.»(Això és la línia 2 i 3)
En cas contrari i NO hi hagi / opt /, llavors imprimirem «No, no hi ha»(Línia 4 i 5)
Després en l'última línia (la número 6) tanquem el if i llest.

Article relacionat:
Establir connexió de xarxa entre PC i les maquines virtuals de Virtualbox

Facin la prova, els mostrarà que / opt / si existeix.

Si desitgen que els mostri l'altre text (el que no existeix) canviïn / opt / per qualsevol altra carpeta que no hi hagi en el sistema, per exemple: / asd /

Com veuen, -d ens serveix per saber si el directori existeix, bé ara si canviem -d per -f és per comprovar existència d'arxius (-d = directori, -f = file / arxiu)

Per exemple:

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

Aquí el llistat de les opcions:

-d - »Comprovar si hi ha determinat directori

-f - »Comprovar si hi ha determinat arxiu

-w - »Comprovar si determinat arxiu té permisos d'escriptura

-x - »Comprovar si determinat arxiu té permisos d'execució.

I bé no hi ha molt més que afegir 🙂

Sé que això li serà molt útil i interessant per a aquells que agraden de programar en Bash 😉

Salutacions


42 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Hugo va dir

    Una altra forma de fer-ho sense if ... then..else:

    test -f /etc/hosts && elcomando

    O també

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

    Etcètera.

    1.    KZKG ^ Gaara va dir

      Cert 😀
      ... O_O ... Ets Hugo, Hugo de Cuba? ... Usant windows8, WTF !!!

      1.    Hugo va dir

        Doncs si, m'estic familiaritzant amb aquest OS i si he de ser-te franc, l'únic que li he trobat útil és el gestor de còpies, per la resta personalment em sembla una plasta, especialment la seva interfície híbrida i les aplicacions de metro. M'agrada menys que el Vista i el 7 (encara que sigui una mica més eficient que aquests), que tampoc m'agradaven. Per l'única cosa que ho estic fent servir és per jugar NFS13 i Skyrim, però aquest OS es porta tant espai que vaig haver de eliminar el meu partició de Linux [snif].

        No obstant això, per a la teva tranquil·litat, et comento que abans d'ahir vaig descarregar l'ISO d'Arch de gener i penso donar-li un tast en la seva versió x86-64, quant aconsegueixi el repo (de casualitat el tindràs?). Ara que segons vaig veure fa servir per defecte paquets signats, em dóna més confiança capbussar-me.

        I a més el meu pare em va dir que em manaria XNUMX Sony Xperia, que vull aprofitar per aprendre una mica de programació per a Android, que era un desig pendent. Així que tranquil·litza't, encara no m'he passat a el costat fosc de la força, buahahahaha 😉

  2.   Patz va dir

    man test

    1.    MSX va dir

      És clar.

  3.   RAW-Basic va dir

    Wenas! ..

    Podríem fer un igual .. ..Però que el directori sigui passat per paràmetre ..

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

    I en diem com:

    ./prueba.sh / opt /

    Salutació ..

  4.   savo va dir

    IF no és un cicle xD

  5.   Gregorio Espases va dir

    Em ve com anell a el dit per a un script que estic fent. És vàlid utilitzar comodins? Per exemple, per saber si hi ha algun .mp4 llavors executar alguna cosa sobre ells.

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

    1.    RAW-Basic va dir

      Sí, és totalment vàlid ..

      Fins i tot a través de paràmetres .. «* .mp4»

      1.    RAW-Basic va dir

        Per exemple,

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

        Si el crides: ./prueba.sh * .mp4

        Si troba arxius .mp4 els esborra .. ..sino et llista els arxius d'aquest directori ..

        1.    Gregorio Espases va dir

          Gràcies pel feedback i tips! 🙂

        2.    Joaquin va dir

          Et va faltar la f xD

          rm -rf $ 1

          Així és més emocionant!

        3.    b1tblu3 va dir

          Meravellós !!!, Cada dia m'enamoro més de Linux, Windows ha quedat relegat en algun racó fosc de la meva Disc Dur, a el qual és a punt de ser esborrat per donar pas a la llum de Linux.

          1.    RAW-Basic va dir

            Excel·lent! .. ..entonces fes el següent paso..y treu-lo ..

            Fa 6 mesos aprox. que tinc en totes les meves màquines només GNU / Linux i no necessito de més .. ..ni de W $ .. ni Wine .. ..i sóc més que feliç així .. 😉

            I vaig contagiant als meus alrededores..ya que tots em veuen amb la meva Arch, ràpid, eficient i feliç .. ..i em demanen que els instal·li Linux .. ..yeah! .. 😀

        4.    Inukaze va dir

          També pots comprobrarlos per diverses extensions, pots fer servir alguna cosa com

          #! / Bin / bash
          Directori = $ HOME / Descàrregues

          if [$ Directori]; then
          trobo «A Continuacio una Llista d'arxius Tipus:»
          trobo «MP1, mp2, mp3, mp4, wav, flac, flaad, aud, midi»
          ls {* .mp?, *. wav, *. fla, *. aud * .midi}
          fi

          l'usar {} et permet especificar diverses extensions en aquest cas, l'ús de «?» , És un comodí, que li permet prendre «Qualsevol Caràcter».

          Espero que els serveixi

        5.    pedro va dir

          T'aconsello la comanda find [directori] [patrón_de_búsqueda] -exec [comando] {} \

      2.    Carlos va dir

        No funciona, vaig posar aquests fitxers en el directori:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        cerca.sh

        #! / Bin / bash
        RUTA = / tmp / PROVA
        cd $ RUTA
        ls -la | awk '{print »« $ 9}'
        if [[-f AB.TXT]]; then
        trobo »Ingrés a l'IF si existeix qualsevol AB
        .TXT »
        fi
        if [-f AB20160422.TXT]; then
        trobo «ingrés per a un arxiu AB específic»
        fi

        quan poso [-f AB.TXT] dóna error
        quan poso [[-f AB
        .TXT]] no dóna error però no troba l'arxiu
        només funciona quan poso un arxiu específic, per exemple:
        if [-f AB20160422.TXT]; then

        No aconsegueixo que funcioni amb comodins * o?

        1.    pedro va dir

          #! / Usr / bin / env bash
          #.encoding = utf-8.

          CONTSTANTS

          EXIT_OK = 0
          EXIT_BAD = 66

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

          if [! «$ 1»];
          llavors
          trobo «cal un paràmetre»
          exit $ EXIT_BAD
          fi

          cd «$ 1"

          files = »ls -h1 $ 1»

          for file in $ ($ files); do
          echo -e «pots fer qualsevol cosa amb $ BOLD $ file $ nc aquí»
          fet

          exit $ EXIT_OK

  6.   MSX va dir

    @KZ, Conta més sobre això: «i és que a l'estar endinsant-me en el meravellós món de Python»!

    1.    KZKG ^ Gaara va dir

      Jajajaja nah ... poc a poc 🙂
      Només sóc un novell en Python, gairebé no tinc temps ja per dedicar-li hores i hores, de manera que vaig lent sí, lent però segur en el meu aprenentatge 😀

  7.   Audoban va dir

    Moltíssimes gràcies 😀 just ahir caminava pensant com fer això.

  8.   ReichSk va dir

    això amb ncurses és genial 🙂

  9.   jazeco va dir

    en 1 paraula ... EXCEL·LENT!
    Fa molt que estava perfeccionant un script per realitzar descàrregues des d'Internet, però em trobava amb el problema que descarregava els arxius que li demanava 1 i una altra vegada sense poder comprovar l'existència 1ro.
    Molt bon Estatut.

  10.   zulan va dir

    Tremendo aportació, aquí des Xile s'agraeix.
    Cada dia mes LINUX em sorprèn gratament,
    Visca el Programari Lliure MIERDAAAA.

  11.   david va dir

    sirbe per
    verificar si un arxiu és d'un directori

  12.   Grovher va dir

    si vull comprovar l'existència d'un fitxer qualsevol en una ruta «/ tmp / receptors» em executi una ordre qualsevol, com seria?

    els estaré molt agraït

    Salutacions

  13.   Joan va dir

    Benvolguts, i per determinar mendiante IF si l'arxiu es troba poblat íntegrament ???. Ho pregunto pel fet que quan aquestes omplint l'arxiu per una transmissió, aquest el pot prendre fins i tot amb la meitat de les dades.

    Salutacions i gràcies per la resposta.

  14.   Inukaze va dir

    Bé crec que també hauries afegir d'exemple, com «comprobrar que no existeix» un "arxiu" o "directori» com ara

    per comprobrar que NO existeix, per exemple utilitzar una variable->

    un Directori

    #! / Bin / bash
    Directori = »$ HOME / Directori de Prova»
    Arxiu = »$ HOME / Arxiu de Prova»

    if [! -d «$ Directori»]; then
    trobo «No existeix $ Directori»
    trobo «Creant ->« $ Directori »
    mkdir «$ Directori»
    else
    trobo «El Directori« $ Directori »ja existeix
    fi

    if [! -d «$ Arxiu»]; then
    trobo «No existeix $ Arxiu»
    trobo «Creant ->« $ Arxiu »
    touch «$ Arxiu»
    else
    trobo «L'Arxiu« $ Arxiu »ja existeix
    fi

    1.    Katekyo va dir

      quan facis el mkdir fixa't després si la terminal ho va poder crear perquè pot trencar les boles si és una carpeta com a root o de sistema hhah

  15.   juliol Vinachi va dir

    Salutacions KZKG ^ Gaara una consulta com faria per utilitzar curl. voldria saber com faig des de consola que faci un ping a una url per veure si està disponible per exemple http://portal.com/directorio/archivo1.php on el fitxer1 em estara emmagatzemant les ip de visites és per al monitoratge d'un equip que necessito que faci aquest pin cada mitja hora perquè em tingui al el gol de la ip publica ja que canvia de tant en tant i no em puc connectar per ssh .

    Salutacions gràcies per endavant que Déu et beneeixi.

    1.    KZKG ^ Gaara va dir

      Hola que tal,

      Primer, has de dir que la variable IP (per exemple) és el contingut d'aquest arxiu, per a això cal:
      1. Descarregar l'arxiu
      2. Veure el contingut i treure d'aquí la IP
      3. Que aquesta IP sigui la variable

      Per exemple:
      Aquí baixem el fitxer - »wget http://portal.com/directorio/archivo1.php -o file.html
      Després assignem a una variable el seu contingut: - »: $ {IP: =` cat file.html`}
      .. suposant que el contingut d'aquest arxiu només tingui la IP, si no és així, caldria treballar amb grep, awk o head.

      Un cop tinguis ia la IP com una variable, la resta és el més simple de l'món 🙂

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

      1.    juliol Vinachi va dir

        Moltes gràcies kzkggaara molt agraït.

  16.   Natalia va dir

    Hola, no entenc molt sobre informàtica i tampoc sé si aquesta entrada va relacionada amb el problema que tinc.

    Us comento per si em llegiu, tot i que és de fa un any el post:
    Resulta que creï una carpeta en el meu escriptori per emmagatzemar uns vídeos. Bé, aquests vídeos els vaig esborrar perquè ja no em feien falta i ara aquesta carpeta em diu que no existeix (tot i que està en el meu escriptori visible).

    - Aquest és el primer problema que tinc:
    No puc esborrar la carpeta.

    - Segon problema i crec que més important:
    En un intent d'esborrar la carpeta, vaig ficar una carpeta de FOTOS. Ara, quan obro la carpeta que «no existeix» està buida i les FOTOS no hi són.

    Com puc recuperar les fotos? He donat a l'opció dins de la carpeta «Mostra documents ocults» però no apareixen la carpeta de les FOTOS.

    Espero que pugueu saber com es soluciona.
    Gràcies.

    1.    valdo va dir

      Hi ha dos usuaris que són els principals .: root i tu_usuario (natalia per exemple). Tots dos tenen carpetes personals. tu_usuario a / home i root a / (directori arrel). Fent clic dret sobre la carpeta fixa't a qui pertany. Si és a root amb el teu gestor de fitxers utilitzant sudo o gksu o kdesu depenent de l'entorn que facis servir veu a directori arrel -> root -> Desktop i rpobablemente trobis les fotos i puguis esborrar la carpeta. Algunes distros quan no ets el propietari de l'arxiu o directori i no tens permisos d'accés et diuen directori / fitxer no existent. Si el propietari ets tu i no root fas el mateix amb el gestor de fitxers amb suo, etc i vas a directori arrel -> / home -> carpeta_personal -> Desktop i veus si hi estan les fotos i si pots esborrar la carpeta.
      Si això no funciona caldrà veure altres opcions des del terminal (consola).

  17.   Pedro Manuel Aguayo Muñoz va dir

    Hola que tal, em trobo realitzant un treball en bash i voldria saber com verificar si hi ha un directori ingressat des teclat, per exemple

    #! / Bin / bash
    read ruta
    #Ingreso ~ / Desktop
    #Luego tracte de navegar per aquest directori
    cd $ ruta
    #Me apareix el següent missatge bash: cd: ~ / Desktop: No existeix el fitxer o directori

    La meva pregunta és ¿Què puc fer perquè l'ingressi des teclat m'ho prengui com una ruta d'un directori?

  18.   Miguel va dir

    I com puc saber si hi ha un grup,

  19.   heidi va dir

    bones tinc un problema en el meu Canaima quan pressiono el botó cunaguaro diu que no hi ha fitxer o directori com faria per resoldre aquest problema i de la resta no m'obre cunaguaro siusplau gràcies.

  20.   Carlos va dir

    Com es fa el if en BASH si el nom de l'arxiu té espais?
    Per exemple:
    Dades mes de Abril.xlsx

    Per preguntar si existeix el fitxer

    1.    Manuel Alcocer Jiménez va dir

      Carles, així:

      if [[ «$ variable» == Dades \ mes \ de \ Abril.xlsx]]; then echo 'coincideix'; fi

      També pots:
      if [[ «$ variable» == 'Dades mes de Abril.xlsx']]; then echo 'coincideix'; fi

      Una altra opció:
      [[ «$ Variable» == 'Dades mes de Abril.xlsx']] && echo 'coincideix' || echo 'no coincideix'

      En algunes zones fosques d'internet recomanen utilitzar [[]] en comptes de [], i si vas a comparar nombres llavors: ((variable> = 3)) && echo 'variable és més gran o igual que 3' || echo 'variable és menor que 3'

      Per tant, per a nombres:

      if ((numero! = 4)); then echo "$ {nombre} no es 4»; else echo "$ {número} es 4»; fi

  21.   Cessar Mateus va dir

    com es pot fer un codi perquè validi si el directori té un text específic, per poder editar-lo.

    exemple:

    if (text1)

    no fer res

    else

    canviar text1 per text2

  22.   Miguel va dir

    un dubte, com seria perquè comprovés cada 15 segons si existeix el fitxer o no, gràcies.

  23.   riu va dir

    Hola,
    això:
    if [-w / home / Komun / Logs / tu]; then
    esbrina si l'arxiu es pot escriure. Però es basa en els permisos d'usuari. Es pot fer per saber si el grup o els others tenen permisos?