Vérifier si un fichier ou un dossier existe ou non (et plus) avec boucle IF

Je n'ai rien mis de Frapper, et c'est qu'en entrant dans le monde merveilleux de Python j'ai un peu oublié cet autre ami qui m'a tant aidé 🙂

Ici, je mets quelque chose aux passionnés de Bash, comme le titre l'indique ... Je vais vous montrer comment vérifier si un fichier ou un dossier existe ou non dans le système, en utilisant simplement: if

Nous allons créer un fichier .sh et lui donner les permissions d'exécution, pour cela il suffit de mettre la commande suivante dans un terminal:

touchez test.sh && chmod + x test.sh

Cela a créé le fichier (touch test.sh) et vous donne également des autorisations d'exécution (chmod + x test.sh)

Alors écrivons ce qui suit:

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

Qu'est-ce que cela?

Simple

Dans la première ligne - » si [-d / opt /];

Ici, nous demandons, est-ce que le répertoire / opt / existe? Oui répertoire / dossier, car le -d signifie répertoire ou dossier.
Alors s'il existe nous imprimerons dans le terminal «Oui, cela existe.»(Ceci est la ligne 2 et 3)
Sinon et / opt / n'existe PAS, alors nous imprimerons «Non ça n'existe pas»(Lignes 4 et 5)
Ensuite, dans la dernière ligne (numéro 6), nous fermons le si et c'est tout.

Article connexe:
Établir une connexion réseau entre le PC et les machines virtuelles Virtualbox

Faites le test, cela vous montrera que / opt / existe.

Si vous voulez que je vous montre l'autre texte (celui qui n'existe pas) changez / opt / pour tout autre dossier qui n'existe pas dans votre système, par exemple: / asd /

Comme vous pouvez le voir, -d nous aide à savoir si le répertoire existe, eh bien maintenant si nous changeons -d en -f c'est pour vérifier l'existence des fichiers (-d = répertoire, -f = fichier / fichier)

Par exemple:

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

Voici la liste des options:

-d - »Vérifier si un certain répertoire existe

-f - »Vérifier si un certain fichier existe

-w - »Vérifier si un certain fichier a l'autorisation d'écriture

-x - »Vérifiez si un certain fichier dispose des autorisations d'exécution.

Et bien il n'y a pas grand chose à ajouter 🙂

Je sais que ce sera très utile et intéressant pour ceux qui aiment programmer en Bash 😉

salutations


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Hugo dit

    Une autre façon de le faire sans si… alors… sinon:

    test -f /etc/hosts && elcomando

    Ou aussi

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

    Etc.

    1.    KZKG ^ Gaara dit

      Droite 😀
      … O_O… Êtes-vous Hugo, Hugo de Cuba? … En utilisant Windows8, WTF !!!

      1.    Hugo dit

        Eh bien oui, je me familiarise avec cet OS et si je dois être franc, la seule chose que j'ai trouvée utile est le gestionnaire de copie, sinon je le trouve personnellement nuisible, en particulier son interface hybride et les applications métro. Je l'aime moins que le Vista et le 7 (quoique un peu plus efficaces que ceux-ci), que je n'aimais pas non plus. La seule chose pour laquelle je l'utilise est de jouer à NFS13 et Skyrim, mais ce système d'exploitation prend tellement de place que j'ai dû supprimer ma partition Linux [snif].

        Cependant, pour votre tranquillité d'esprit, je vous dirai qu'avant-hier j'ai téléchargé Arch ISO pour janvier et je prévois de lui faire un petit test dans sa version x86-64, dès que j'aurai le repo (l'aurez-vous?). Maintenant que, comme je l'ai vu, il utilise des packages signés par défaut, cela me donne plus de confiance pour plonger.

        Et mon père m'a également dit qu'il m'enverrait un Sony Xperia, dont je veux profiter pour apprendre de la programmation pour Android, ce qui était un souhait en suspens. Alors calme-toi, je ne suis pas encore allé du côté obscur de la force, buahahahaha 😉

  2.   Patz dit

    test de l'homme

    1.    msx dit

      Bien sûr.

  3.   RAW-Basique dit

    Wenas! ..

    On pourrait faire le même .. .. mais le répertoire est passé en paramètre ..

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

    Et nous l'appelons comme:

    ./test.sh / opt /

    Salutation..

  4.   propre dit

    IF n'est pas un cycle xD

  5.   Grégory Swords dit

    Cela me va comme un gant pour un scénario que je fais. Est-il valide d'utiliser des caractères génériques? Par exemple, pour savoir s'il existe des fichiers .mp4, exécutez quelque chose dessus.

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

    1.    RAW-Basique dit

      Oui, c'est totalement valable.

      Même via les paramètres .. "* .mp4"

      1.    RAW-Basique dit

        Par exemple,

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

        Si vous l'appelez: ./test.sh * .mp4

        S'il trouve des fichiers .mp4, il les supprime ... ... mais il ne liste pas les fichiers de ce répertoire ...

        1.    Grégory Swords dit

          Merci pour les commentaires et les conseils! 🙂

        2.    Joaquin dit

          Vous avez manqué le f xD

          rm -rf 1 $

          C'est plus excitant!

        3.    b1tblu3 dit

          Merveilleux !!!, Chaque jour je tombe plus amoureux de Linux, Windows a été relégué dans un coin sombre de mon disque dur, qui est sur le point d'être effacé pour laisser place à la lumière de Linux.

          1.    RAW-Basique dit

            Excellent! .. .. alors passez à l'étape suivante .. et sortez-le ..

            Il y a 6 mois env. Je n'ai que GNU / Linux sur toutes mes machines et je n'ai pas besoin de plus .. ..pas de W $ .. ou de Wine .. .. et je suis plus qu'heureux comme ça .. 😉

            Et j'infecte mon environnement .. puisque tout le monde me voit avec mon Arch, rapide, efficace et heureux .. .. et ils me demandent d'installer Linux .. .. ouais! .. 😀

        4.    Inukaze dit

          Vous pouvez également les vérifier pour diverses extensions, vous pouvez utiliser quelque chose comme

          #! / Bin / bash
          Répertoire = $ HOME / Téléchargements

          if [$ Directory]; puis
          echo "Voici une liste des types de fichiers:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          l'utilisation de {} vous permet de spécifier plusieurs extensions dans ce cas, l'utilisation de "?" , est un joker, qui vous permet de prendre "N'importe quel caractère".

          J'espère que vous apprendrez

        5.    pedro dit

          Je recommande la commande find [directory] [search_pattern] –exec [command] {} \

      2.    Carlos dit

        Cela ne fonctionne pas, je mets ces fichiers dans le répertoire:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / bash
        CHEMIN = / tmp / TEST
        cd $ ROUTE
        ls -la | awk '{imprimer »« $ 9}'
        si [[-f AB.SMS]]; puis
        echo »Entrez le IF s'il y a un AB
        .SMS "
        fi
        si [-f AB20160422.TXT]; puis
        echo "entrée pour un fichier AB spécifique"
        fi

        quand je mets [-f AB.TXT] donne une erreur
        quand je mets [[-f AB
        .TXT]] ne donne pas d'erreur mais ne trouve pas le fichier
        cela ne fonctionne que lorsque je mets un fichier spécifique, par exemple:
        si [-f AB20160422.TXT]; puis

        Je ne parviens pas à le faire fonctionner avec des caractères génériques * ou?

        1.    pedro dit

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

          CONCURRENTS

          EXIT_OK = 0
          EXIT_BAD = 66

          GRAS = »\ 033 [1 m»
          NC = »\ 033 [0m»
          ROUGE = »\ 033 [31m»

          si [! "$ 1"];
          puis
          echo "il manque un paramètre"
          quitter $ EXIT_BAD
          fi

          cd "$ 1"

          fichiers = »ls -h1 $ 1»

          pour fichier dans $ ($ files); faire
          echo -e "vous pouvez faire n'importe quoi avec $ BOLD $ file $ nc ici"
          fait

          quitter $ EXIT_OK

  6.   msx dit

    @KZ, dis-en plus à ce sujet: "et c'est parce que j'entre dans le monde merveilleux de Python"!

    1.    KZKG ^ Gaara dit

      HAHAHAHA nah ... petit à petit 🙂
      Je ne suis encore qu'un débutant en Python, j'ai à peine le temps d'y consacrer des heures et des heures, donc je suis lent oui, lent mais sûr dans mon apprentissage 😀

  7.   audoban dit

    Merci beaucoup 😀 hier encore, je réfléchissais à la manière de procéder.

  8.   Reichsk dit

    c'est génial avec ncurses 🙂

  9.   Jazeco dit

    en 1 mot… EXCELLENT!
    Pendant longtemps j'ai perfectionné un script pour faire des téléchargements depuis Internet, mais j'ai été confronté au problème du téléchargement des fichiers que je demandais 1 et encore sans pouvoir vérifier l'existence 1ro.
    Très bon tuto.

  10.   Zulan dit

    Une contribution énorme, ici du Chili est appréciée.
    Chaque jour plus LINUX me surprend agréablement,
    Vive le logiciel libre MIERDAAAA.

  11.   david dit

    servir pour
    vérifier si un fichier provient d'un répertoire

  12.   bosquet dit

    Si je veux vérifier l'existence d'un fichier dans un chemin «/ tmp / récepteurs», exécutez n'importe quelle commande, comment serait-ce?

    Je serai très reconnaissant

    salutations

  13.   Jean dit

    Cher, et pour déterminer par IF si le fichier est entièrement rempli ???. Je pose cette question parce que lorsque vous remplissez le fichier pour une transmission, il peut le prendre même avec la moitié des données.

    Salutations et merci pour votre réponse.

  14.   Inukaze dit

    Eh bien, je pense que vous devriez également ajouter un exemple, comme "Vérifier qu'il n'y a pas de" fichier "ou de" répertoire "comme par exemple

    pour vérifier qu'elle n'existe PAS, par exemple utilisez une variable->

    Un annuaire

    #! / Bin / bash
    Répertoire = »$ HOME / Répertoire de test»
    Fichier = »$ HOME / Fichier de test»

    si [! -d "$ Directory"]; puis
    echo "Il n'y a pas de $ Directory"
    echo "Création ->" $ Directory "
    mkdir "$ Directory"
    d'autre
    echo "Le répertoire" $ Directory "existe déjà
    fi

    si [! -d "$ Fichier"]; puis
    echo "Le fichier $ n'existe pas"
    echo "Création ->" $ File "
    touchez "$ File"
    d'autre
    echo "Le fichier" $ File "existe déjà
    fi

    1.    Katekyo dit

      quand vous faites le mkdir vérifiez plus tard si le terminal pourrait le créer car il peut casser les boules s'il s'agit d'un dossier en tant que root ou système hhah

  15.   Julius Vinachi dit

    Salutations KZKG ^ Gaara une requête comme je le ferais pour utiliser curl. Je voudrais savoir comment je fais depuis la console pour cingler une URL pour voir si elle est disponible par exemple http://portal.com/directorio/archivo1.php Là où file1 stockera les adresses IP de la visite, c'est pour surveiller une équipe que j'ai besoin de faire cette broche toutes les demi-heures pour que je connaisse l'IP publique car elle change de temps en temps et je ne peux pas me connecter par ssh.

    Salutations merci d'avance que Dieu vous bénisse.

    1.    KZKG ^ Gaara dit

      Bonjour à tous,

      Tout d'abord, vous devez dire que la variable IP (par exemple) est le contenu de ce fichier, pour cela, vous devez:
      1. Téléchargez le fichier
      2. Affichez son contenu et obtenez l'adresse IP à partir de là
      3. Cette IP est la variable

      Par exemple:
      Ici, nous téléchargeons le fichier - »wget http://portal.com/directorio/archivo1.php -o fichier.html
      Ensuite, nous attribuons à une variable son contenu: - »: $ {IP: =` cat file.html`}
      .. en supposant que le contenu de ce fichier n'a que l'IP, sinon, vous devrez travailler avec grep, awk ou head.

      Une fois que vous avez déjà l'IP comme variable, le reste est la chose la plus simple au monde 🙂

      Si tu le souhaites, écris-moi par email (kzkggaara[at]desdelinux[dot]net) Je serai heureux de vous aider

      1.    Julius Vinachi dit

        Merci beaucoup kzkggaara très reconnaissant.

  16.   Natalia dit

    Salut, je ne comprends pas grand-chose à l'informatique et je ne sais pas si ce message est lié au problème que j'ai.

    Je commente au cas où vous me liriez, même si l'article date d'il y a un an:
    Il s'avère que j'ai créé un dossier sur mon bureau pour stocker des vidéos. Eh bien, j'ai supprimé ces vidéos parce que je n'en avais plus besoin et maintenant ce dossier me dit qu'il n'existe pas (même s'il est visible sur mon bureau).

    - C'est le premier problème que j'ai:
    Je ne peux pas supprimer le dossier.

    - Deuxième problème et je pense plus important:
    Pour tenter de supprimer le dossier, j'ai mis un dossier PHOTOS. Maintenant, quand j'ouvre le dossier qui "n'existe pas", il est vide et les PHOTOS ne sont pas là.

    Comment puis-je récupérer les photos? J'ai donné l'option dans le dossier "Afficher les documents cachés" mais le dossier PHOTOS n'apparaît pas.

    J'espère que vous saurez comment cela est résolu.
    Merci.

    1.    valdo dit

      Il y a deux utilisateurs qui sont les principaux: root et your_user (natalia par exemple). Ils ont tous deux des dossiers personnels. votre_utilisateur dans / home et root dans / (répertoire racine). En cliquant avec le bouton droit sur le dossier, voyez à qui il appartient. S'il est root avec votre gestionnaire de fichiers en utilisant sudo ou gksu ou kdesu selon l'environnement que vous utilisez, allez dans le répertoire racine -> root -> Desktop et vous trouverez probablement les photos et vous pourrez supprimer le dossier. Certaines distributions lorsque vous n'êtes pas le propriétaire du fichier ou du répertoire et que vous n'avez pas les autorisations d'accès vous indiquent que le répertoire / fichier n'existe pas. Si vous êtes le propriétaire et que vous n'êtes pas root, faites de même avec le gestionnaire de fichiers avec sudo, etc. et allez dans le répertoire racine -> / home -> personal_folder -> Desktop et voyez si les photos sont là et si vous pouvez supprimer le dossier.
      Si cela ne fonctionne pas, vous devrez voir d'autres options du terminal (console).

  17.   Pedro Manuel Aguayo Muñoz dit

    Salut, comment vas-tu? Je fais un travail dans bash et je voudrais savoir comment vérifier s'il y a un répertoire entré depuis le clavier, par exemple

    #! / Bin / bash
    lire l'itinéraire
    #Enter ~ / Bureau
    #Ensuite, j'essaye de naviguer dans ce répertoire
    cd $ chemin
    # J'obtiens le message bash suivant: cd: ~ / Desktop: Le fichier ou le répertoire n'existe pas

    Ma question est la suivante: que puis-je faire pour que je le saisisse à partir du clavier et que je le prenne comme chemin de répertoire?

  18.   Miguel dit

    Et comment puis-je savoir si un groupe existe,

  19.   bonjour dit

    bon j'ai un problème dans mon canaima quand j'appuie sur le bouton cunaguaro il dit qu'il n'y a pas de fichier ou de répertoire comme il le ferait pour résoudre ce problème et le reste n'ouvre pas cunaguaro merci merci.

  20.   Carlos dit

    Comment faire le if dans BASH si le nom de fichier a des espaces?
    Par exemple:
    Avril data.xlsx

    Pour demander si le fichier existe

    1.    Manuel Alcocer Jimenez dit

      Carlos, comme ça:

      if [["$ variable" == Données \ mois \ de \ avril.xlsx]]; puis echo 'match'; Fi

      Vous pouvez aussi:
      if [["$ variable" == 'Données du mois d'avril.xlsx']]; puis echo 'match'; Fi

      Une autre option:
      [["$ Variable" == 'Données pour avril.xlsx']] && echo 'correspond à' || echo 'ne correspond pas'

      Dans certaines zones sombres d'Internet, ils recommandent d'utiliser [[]] au lieu de [], et si vous comptez comparer des nombres alors: ((variable> = 3)) && echo 'variable est supérieur ou égal à 3' | | La variable echo 'est inférieure à 3'

      Par conséquent, pour les nombres:

      si ((nombre! = 4)); alors echo "$ {nombre} n'est pas 4"; else echo "$ {nombre} vaut 4"; Fi

  21.   César Mateus dit

    Comment faire un code pour valider si le répertoire a un texte spécifique, pour pouvoir le modifier.

    exemple:

    si (texte1)

    ne rien faire

    d'autre

    change text1 en text2

  22.   Miguel dit

    une question, comment serait-il de vérifier toutes les 15 secondes si le fichier existe ou non, merci.

  23.   berge de rivière dit

    Salut,
    ce:
    if [-w / home / Komun / Logs / ti]; puis
    Vérifiez si le fichier est accessible en écriture. Mais il est basé sur les autorisations des utilisateurs. Peut-il être fait pour savoir si le groupe ou les autres ont des autorisations?