{"id":353649,"date":"2024-08-27T09:20:06","date_gmt":"2024-08-27T09:20:06","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/verifier-l-existence-de-fichiers-linux\/"},"modified":"2024-10-13T19:07:48","modified_gmt":"2024-10-13T19:07:48","slug":"verifier-l-existence-de-fichiers-linux","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/fr\/script-hub\/verifier-l-existence-de-fichiers-linux\/","title":{"rendered":"Guide complet : Comment utiliser un script Linux pour v\u00e9rifier l&rsquo;existence d&rsquo;un fichier ou d&rsquo;un dossier ?"},"content":{"rendered":"<p>Garantir l&rsquo;int\u00e9grit\u00e9 et la pr\u00e9sence des fichiers et r\u00e9pertoires critiques est primordial dans la gestion informatique. Que vous soyez un professionnel de l&rsquo;informatique ou un <a href=\"https:\/\/www.ninjaone.com\/fr\/quest-ce-quun-msp\" target=\"_blank\" rel=\"noopener\">fournisseur de services g\u00e9r\u00e9s (MSP)<\/a>, le suivi des fichiers syst\u00e8me essentiels ou des r\u00e9pertoires d&rsquo;applications sp\u00e9cifiques peut contribuer \u00e0 maintenir la stabilit\u00e9, la s\u00e9curit\u00e9 et la conformit\u00e9 du syst\u00e8me. C&rsquo;est l\u00e0 que les scripts d&rsquo;automatisation entrent en jeu, en particulier celui qui peut vous alerter si <strong>un fichier ou un dossier sp\u00e9cifique est trouv\u00e9<\/strong> dans un r\u00e9pertoire ou un sous-r\u00e9pertoire.<\/p>\n<h2>Contexte<\/h2>\n<p>Le script fourni offre une solution robuste de recherche et d&rsquo;alerte bas\u00e9e sur l&rsquo;existence de fichiers ou de dossiers dans un chemin d&rsquo;acc\u00e8s sp\u00e9cifi\u00e9. Ce type d&rsquo;automatisation est crucial dans divers sc\u00e9narios, tels que la v\u00e9rification du succ\u00e8s du d\u00e9ploiement, le contr\u00f4le des modifications non autoris\u00e9es ou la garantie que les configurations critiques sont en place. Pour les professionnels de l&rsquo;informatique et les MSP, l&rsquo;utilisation de ces scripts peut am\u00e9liorer l&rsquo;efficacit\u00e9 op\u00e9rationnelle et r\u00e9duire les efforts de surveillance manuelle.<\/p>\n<h2>Le script<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">#!\/usr\/bin\/env bash\r\n\r\n# Description: Alert if a specified file or folder is found in a directory or subdirectory you specify.\r\n#\r\n# Release Notes: Initial Release\r\n# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n# Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n#\r\n# Below are all the (case sensitive) valid parameters for this script.\r\n# Only the path to search and name of file or folder are required!\r\n#\r\n# Parameter: --path \"\/opt\/NinjaRMM\/programdata\"\r\n#   Required\r\n#   Base path to search for files or folders.\r\n#\r\n# Parameter: --name \"ninjarmm-cli\"\r\n#   Required\r\n#   Name of the file or folder to search for.\r\n#   Notes:\r\n#       If the name is not provided, the script will search for the path only.\r\n#       This is case sensitive and accepts wildcards.\r\n#\r\n# Parameter: --type \"Files Or Folders\"\r\n#   Required\r\n#   Search for files or folders.\r\n#\r\n# Parameter: --type \"Files Only\"\r\n#   Required\r\n#   Searches for files only.\r\n#\r\n# Parameter: --type \"Folders Only\"\r\n#   Required\r\n#   Searches for folder only.\r\n#\r\n# Parameter: --timeout 10\r\n#   Optional and defaults to 30 minutes\r\n#   Time in minutes to wait for the search to complete before timing out.\r\n#\r\n# Parameter: --customfield \"myCustomField\"\r\n#   Optional\r\n#   Custom Field to save the search results to.\r\n\r\ndie() {\r\n    local _ret=\"${2:-1}\"\r\n    test \"${_PRINT_HELP:-no}\" = yes &amp;&amp; print_help &gt;&amp;2\r\n    echo \"$1\" &gt;&amp;2\r\n    exit \"${_ret}\"\r\n}\r\n\r\nbegins_with_short_option() {\r\n    local first_option all_short_options='h'\r\n    first_option=\"${1:0:1}\"\r\n    test \"$all_short_options\" = \"${all_short_options\/$first_option\/}\" &amp;&amp; return 1 || return 0\r\n}\r\n\r\n# Initize arguments\r\n_arg_path=\r\n_arg_name=\r\n_arg_type=\r\n_arg_timeout=30\r\n_arg_customfield=\r\n\r\nprint_help() {\r\n    printf '%s\\n' \"Check existence of a file or folder\"\r\n    printf 'Usage: %s [--path &lt;arg&gt;] [--name &lt;arg&gt;] [--type &lt;\"Files Only\"|\"Folders Only\"|\"Files Or Folders\"&gt;] [--timeout &lt;30&gt;] [--customfield &lt;arg&gt;] [-h|--help]\\n' \"$0\"\r\n    printf '\\t%s\\n' \"-h, --help: Prints help\"\r\n}\r\n\r\nparse_commandline() {\r\n    while test $# -gt 0; do\r\n        _key=\"$1\"\r\n        case \"$_key\" in\r\n        --path)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_path=\"$2\"\r\n            shift\r\n            ;;\r\n        --path=*)\r\n            _arg_path=\"${_key##--path=}\"\r\n            ;;\r\n        --name)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_name=\"$2\"\r\n            shift\r\n            ;;\r\n        --name=*)\r\n            _arg_name=\"${_key##--name=}\"\r\n            ;;\r\n        --type)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_type=\"$2\"\r\n            shift\r\n            ;;\r\n        --type=*)\r\n            _arg_type=\"${_key##--type=}\"\r\n            ;;\r\n        --timeout)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_timeout=\"$2\"\r\n            shift\r\n            ;;\r\n        --timeout=*)\r\n            _arg_timeout=\"${_key##--timeout=}\"\r\n            ;;\r\n        --customfield)\r\n            test $# -lt 2 &amp;&amp; die \"Missing value for the optional argument '$_key'.\" 1\r\n            _arg_customfield=\"$2\"\r\n            shift\r\n            ;;\r\n        --customfield=*)\r\n            _arg_customfield=\"${_key##--customfield=}\"\r\n            ;;\r\n        -h | --help)\r\n            print_help\r\n            exit 0\r\n            ;;\r\n        -h*)\r\n            print_help\r\n            exit 0\r\n            ;;\r\n        *)\r\n            _PRINT_HELP=yes die \"FATAL ERROR: Got an unexpected argument '$1'\" 1\r\n            ;;\r\n        esac\r\n        shift\r\n    done\r\n}\r\n\r\nparse_commandline \"$@\"\r\n\r\nfunction SetCustomField() {\r\n    customfieldName=$1\r\n    customfieldValue=$2\r\n    if [ -f \"${NINJA_DATA_PATH}\/ninjarmm-cli\" ]; then\r\n        if [ -x \"${NINJA_DATA_PATH}\/ninjarmm-cli\" ]; then\r\n            if \"$NINJA_DATA_PATH\"\/ninjarmm-cli get \"$customfieldName\" &gt;\/dev\/null; then\r\n                # check if the value is greater than 10000 characters\r\n                if [ ${#customfieldValue} -gt 10000 ]; then\r\n                    echo \"[Warn] Custom field value is greater than 10000 characters\"\r\n                fi\r\n                if ! echo \"${customfieldValue::10000}\" | \"$NINJA_DATA_PATH\"\/ninjarmm-cli set --stdin \"$customfieldName\"; then\r\n                    echo \"[Warn] Failed to set custom field\"\r\n                else\r\n                    echo \"[Info] Custom field value set successfully\"\r\n                fi\r\n            else\r\n                echo \"[Warn] Custom Field ($customfieldName) does not exist or agent does not have permission to access it\"\r\n            fi\r\n        else\r\n            echo \"[Warn] ninjarmm-cli is not executable\"\r\n        fi\r\n    else\r\n        echo \"[Warn] ninjarmm-cli does not exist\"\r\n    fi\r\n}\r\n\r\nparentSearchPath=$_arg_path\r\nleafSearchName=$_arg_name\r\nsearchType=$_arg_type\r\ntimeout=$_arg_timeout\r\ncustomField=$_arg_customfield\r\n\r\n# Get values from Script Variables\r\nif [[ -n \"${pathToSearch}\" ]]; then\r\n    parentSearchPath=\"${pathToSearch}\"\r\nfi\r\nif [[ -n \"${nameOfFileOrFolder}\" ]]; then\r\n    leafSearchName=\"${nameOfFileOrFolder}\"\r\nfi\r\nif [[ -n \"${filesOrFolders}\" &amp;&amp; \"${filesOrFolders}\" != \"null\" ]]; then\r\n    searchType=\"${filesOrFolders}\"\r\nfi\r\nif [[ -n \"${searchTimeout}\" &amp;&amp; \"${searchTimeout}\" != \"null\" ]]; then\r\n    timeout=\"${searchTimeout}\"\r\nfi\r\nif [[ -n \"${customFieldName}\" &amp;&amp; \"${customFieldName}\" != \"null\" ]]; then\r\n    customField=\"${customFieldName}\"\r\nfi\r\n\r\nif [[ -z \"${parentSearchPath}\" ]]; then\r\n    echo \"[Error] Path to Search is empty\"\r\n    exit 1\r\nfi\r\n\r\n# Check if path exists\r\nif [ -e \"${parentSearchPath}\" ]; then\r\n    echo \"[Info] Path ${parentSearchPath} exists\"\r\nelse\r\n    echo \"[Error] Path to Search ${parentSearchPath} does not exist or is an invalid path\"\r\n    exit 1\r\nfi\r\n\r\n# Check if timeout is a number\r\nif ! [[ \"${timeout}\" =~ ^[0-9]+$ ]]; then\r\n    echo \"[Error] Timeout is not a number\"\r\n    exit 1\r\nfi\r\n# Check if timeout is not in the range of 1 to 120\r\nif [[ \"${timeout}\" -lt 1 || \"${timeout}\" -gt 120 ]]; then\r\n    echo \"[Error] Timeout is not in the range of 1 to 120\"\r\n    exit 1\r\nfi\r\n\r\n# Search for files or folders\r\nif [[ -n \"${leafSearchName}\" &amp;&amp; \"${leafSearchName}\" != \"null\" ]]; then\r\n    if [[ \"${searchType}\" == *\"Files\"* &amp;&amp; \"${searchType}\" == *\"Only\"* ]]; then\r\n        echo \"[Info] Searching for files only\"\r\n        # Search for files only\r\n        # Use timeout to prevent the find command from running indefinitely\r\n        foundPath=$(timeout \"${timeout}m\" find \"$parentSearchPath\" -type f -name \"$leafSearchName\" 2&gt;\/dev\/null)\r\n        exitcode=$?\r\n        if [[ $exitcode -eq 0 || $exitcode -eq 124 ]]; then\r\n            if [[ -n $foundPath ]]; then\r\n                echo \"[Alert] File Found\"\r\n            fi\r\n        fi\r\n    elif [[ \"${searchType}\" == *\"Folders\"* &amp;&amp; \"${searchType}\" == *\"Only\"* ]]; then\r\n        echo \"[Info] Searching for folders only\"\r\n        # Search for folders only\r\n        # Use timeout to prevent the find command from running indefinitely\r\n        foundPath=$(timeout \"${timeout}m\" find \"$parentSearchPath\" -type d -name \"$leafSearchName\" 2&gt;\/dev\/null)\r\n        exitcode=$?\r\n        if [[ $exitcode -eq 0 || $exitcode -eq 124 ]]; then\r\n            if [[ -n $foundPath ]]; then\r\n                echo \"[Alert] File Found\"\r\n            fi\r\n        fi\r\n    elif [[ \"${searchType}\" == *\"Files\"* &amp;&amp; \"${searchType}\" == *\"Folders\"* ]]; then\r\n        echo \"[Info] Searching for files or folders\"\r\n        # Search for files or folders\r\n        # Use timeout to prevent the find command from running indefinitely\r\n        foundPath=$(timeout \"${timeout}m\" find \"$parentSearchPath\" -name \"$leafSearchName\" 2&gt;\/dev\/null)\r\n        exitcode=$?\r\n        if [[ $exitcode -eq 0 || $exitcode -eq 124 ]]; then\r\n            if [[ -n $foundPath ]]; then\r\n                echo \"[Alert] File Found\"\r\n            fi\r\n        fi\r\n    else\r\n        echo \"[Error] Invalid search type\"\r\n        echo \"Valid search types: Files Only, Folders Only, Files Or Folders\"\r\n        exit 1\r\n    fi\r\nelif [[ -z \"${leafSearchName}\" ]]; then\r\n    # Search in path only\r\n    echo \"[Info] Searching in path only\"\r\n    # Search in path only\r\n    # Use timeout to prevent the find command from running indefinitely\r\n    foundPath=$(timeout \"${timeout}m\" find \"$parentSearchPath\")\r\n    exitcode=$?\r\n    if [[ $exitcode -eq 0 || $exitcode -eq 124 ]]; then\r\n        if [[ -n $foundPath ]]; then\r\n            echo \"[Alert] File Found\"\r\n        fi\r\n    fi\r\nfi\r\n\r\n# Check exit code\r\nif [[ -n $foundPath ]]; then\r\n    if [[ -n \"${foundPath}\" ]]; then\r\n        # Split the string into an array\r\n        IFS=$'\\n' read -rd '' -a foundPathArray &lt;&lt;&lt;\"${foundPath}\"\r\n        # Print each element of the array\r\n        for element in \"${foundPathArray[@]}\"; do\r\n            echo \"[Alert] ${element} exists\"\r\n        done\r\n    elif [[ -z \"${foundPath}\" ]]; then\r\n        echo \"[Info] ${foundPath} does not exist\"\r\n    fi\r\nelif [[ -z $foundPath ]]; then\r\n    echo \"[Warn] Could not find a file or folder\"\r\n    exit 1\r\nelse\r\n    # If the find command fails to find the file or folder\r\n\r\n    # Figure out the grammer for the search type\r\n    if [[ \"${searchType}\" == *\"Only\"* ]]; then\r\n        if [[ \"${searchType}\" == *\"Files\"* ]]; then\r\n            searchTypeInfo=\"file\"\r\n        elif [[ \"${searchType}\" == *\"Folders\"* ]]; then\r\n            searchTypeInfo=\"folder\"\r\n        fi\r\n    elif [[ \"${searchType}\" == *\"Files\"* &amp;&amp; \"${searchType}\" == *\"Folders\"* ]]; then\r\n        searchTypeInfo=\"file or folder\"\r\n    fi\r\n    echo \"[Info] Could not find a ${searchTypeInfo} in the path ${parentSearchPath} with the name containing: ${leafSearchName}\"\r\nfi\r\n\r\n# If command times out\r\nif [[ $exitcode -ge 124 &amp;&amp; $exitcode -le 127 || $exitcode -eq 137 ]]; then\r\n    echo \"[Alert] Timed out searching for file or folder\"\r\n    echo \"timeout exit code: $exitcode\"\r\n    echo \"  124  if COMMAND times out, and --preserve-status is not specified\"\r\n    echo \"  125  if the timeout command itself fails\"\r\n    echo \"  126  if COMMAND is found but cannot be invoked\"\r\n    echo \"  127  if COMMAND cannot be found\"\r\n    echo \"  137  if COMMAND (or timeout itself) is sent the KILL (9) signal (128+9)\"\r\n    echo \"find command result: $foundPath\"\r\n    exit 1\r\nfi\r\n\r\n# Save to custom field\r\nif [[ -n \"${customField}\" &amp;&amp; \"${customField}\" != \"null\" ]]; then\r\n    SetCustomField \"${customField}\" \"${foundPath}\"\r\nfi<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"blog-cta-new blog-cta-style-1\"><div class=\"cta-left\"><h2><\/h2><p><\/p><\/div><div class=\"cta-right\"><a class=\"button\" href=\"\"><\/a><\/div><\/div>\n<h2>Description d\u00e9taill\u00e9e<\/h2>\n<p>Nous allons nous plonger dans le script pour comprendre son fonctionnement, ses param\u00e8tres et ses fonctionnalit\u00e9s :<\/p>\n<h3>Param\u00e8tres et options<\/h3>\n<p>Le script accepte plusieurs param\u00e8tres pour personnaliser l&rsquo;op\u00e9ration de recherche :<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">&#8211;chemin \u00ab\u00a0\/opt\/NinjaRMM\/programdata\u00a0\u00bb : Sp\u00e9cifie le chemin de base pour la recherche de fichiers ou de dossiers. Ce param\u00e8tre est obligatoire.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">&#8211;nom \u00ab\u00a0ninjarmm-cli\u00a0\u00bb : D\u00e9finit le nom du fichier ou du dossier \u00e0 rechercher. Il est \u00e9galement obligatoire et prend en charge la sensibilit\u00e9 \u00e0 la casse et les caract\u00e8res g\u00e9n\u00e9riques.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\">&#8211;type \u00ab\u00a0Files Or Folders\u00a0\u00bb : D\u00e9termine si la recherche doit porter sur les fichiers, les dossiers ou les deux. Param\u00e8tre obligatoire avec options :<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"2\">Fichiers uniquement<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"2\">Dossiers uniquement<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"2\">Fichiers ou dossiers<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\">&#8211;timeout 10 : Un param\u00e8tre facultatif sp\u00e9cifiant le temps (en minutes) \u00e0 attendre pour que la recherche se termine avant de s&rsquo;arr\u00eater, la valeur par d\u00e9faut \u00e9tant de 30 minutes.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">&#8211;champ personnalis\u00e9 \u00ab\u00a0myCustomField\u00a0\u00bb : Param\u00e8tre facultatif permettant d&rsquo;enregistrer les r\u00e9sultats de la recherche dans un champ personnalis\u00e9.<\/li>\n<\/ul>\n<h3>Flux d&rsquo;ex\u00e9cution des scripts<\/h3>\n<p><strong>1. Arguments d&rsquo;initialisation et d&rsquo;analyse :<\/strong> Le script commence par d\u00e9finir des fonctions utilitaires (die et begins_with_short_option) et initialiser les variables d&rsquo;argument. La fonction parse_commandline traite les arguments fournis, les valide et les affecte aux variables correspondantes.<\/p>\n<p><strong>2. SetCustomField Fonction :<\/strong> Cette fonction d\u00e9finit un champ personnalis\u00e9 avec les r\u00e9sultats de la recherche si l&rsquo;outil ninjarmm-cli est disponible et ex\u00e9cutable. Il v\u00e9rifie diverses conditions, telles que l&rsquo;existence de l&rsquo;outil et du champ personnalis\u00e9, et g\u00e8re les contraintes de longueur des valeurs.<\/p>\n<p><strong>3. Logique principale :<\/strong><\/p>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"2\">Le script valide le param\u00e8tre de chemin requis et s&rsquo;assure que le r\u00e9pertoire sp\u00e9cifi\u00e9 existe.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"2\">Il v\u00e9rifie si la valeur du d\u00e9lai d&rsquo;attente est un nombre compris dans la fourchette acceptable (1 \u00e0 120 minutes).<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"2\">En fonction du type sp\u00e9cifi\u00e9 (Fichiers uniquement, Dossiers uniquement, Fichiers ou Dossiers), il effectue la recherche \u00e0 l&rsquo;aide de la commande find avec un d\u00e9lai d&rsquo;attente pour \u00e9viter une ex\u00e9cution ind\u00e9finie.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"2\">Les r\u00e9sultats de la recherche sont trait\u00e9s de mani\u00e8re appropri\u00e9e, en alertant si le fichier ou le dossier est trouv\u00e9 et en enregistrant les r\u00e9sultats dans un champ personnalis\u00e9 si cela est sp\u00e9cifi\u00e9.<\/li>\n<\/ul>\n<h2>Cas d&rsquo;utilisation potentiels<\/h2>\n<ol>\n<li data-leveltext=\"%1.\" data-font=\"Aptos\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>V\u00e9rification du d\u00e9ploiement :<\/strong> S&rsquo;assurer que les fichiers critiques sont pr\u00e9sents apr\u00e8s le d\u00e9ploiement pour confirmer la r\u00e9ussite de l&rsquo;installation de l&rsquo;application.<\/li>\n<li data-leveltext=\"%1.\" data-font=\"Aptos\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Surveillance de la s\u00e9curit\u00e9 :<\/strong> D\u00e9tecter les ajouts non autoris\u00e9s de fichiers ou de r\u00e9pertoires, ce qui pourrait indiquer une faille de s\u00e9curit\u00e9 ou une violation de la politique.<\/li>\n<li data-leveltext=\"%1.\" data-font=\"Aptos\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Audits de conformit\u00e9 :<\/strong> V\u00e9rifier la pr\u00e9sence des fichiers de configuration ou des journaux n\u00e9cessaires au respect des normes industrielles.<\/li>\n<\/ol>\n<h2>\u00c9tude de cas hypoth\u00e9tique<\/h2>\n<p>Imaginez un MSP g\u00e9rant plusieurs environnements clients. En d\u00e9ployant ce script sur les syst\u00e8mes des clients, le MSP peut automatiser le processus de v\u00e9rification des fichiers importants, tels que les d\u00e9finitions d&rsquo;antivirus ou les configurations du syst\u00e8me, en s&rsquo;assurant qu&rsquo;ils sont \u00e0 jour et conformes aux politiques de s\u00e9curit\u00e9. En cas de divergence, le script alerte l&rsquo;entreprise MSP, ce qui permet de rem\u00e9dier rapidement \u00e0 la situation.<\/p>\n<h2>Comparaisons<\/h2>\n<p>Les m\u00e9thodes traditionnelles de v\u00e9rification de l&rsquo;existence d&rsquo;un fichier peuvent impliquer des commandes manuelles ou des scripts de base d\u00e9pourvus d&rsquo;options robustes de gestion des erreurs et de personnalisation. Le script fourni se distingue par un param\u00e9trage complet, la gestion des d\u00e9lais et l&rsquo;int\u00e9gration de champs personnalis\u00e9s pour le stockage des r\u00e9sultats. Ce niveau d&rsquo;automatisation et de flexibilit\u00e9 am\u00e9liore consid\u00e9rablement l&rsquo;efficacit\u00e9 op\u00e9rationnelle.<\/p>\n<h2>FAQ<\/h2>\n<h3>Q\u00a0: Ce script peut-il rechercher plusieurs fichiers ou dossiers \u00e0 la fois ?<\/h3>\n<p>R\u00a0: Non, le script est con\u00e7u pour rechercher un seul fichier ou dossier sp\u00e9cifi\u00e9. Des recherches multiples n\u00e9cessiteraient l&rsquo;ex\u00e9cution de plusieurs scripts.<\/p>\n<h3>Q\u00a0: Comment le script g\u00e8re-t-il les grands r\u00e9pertoires ?<\/h3>\n<p>R\u00a0: Le script utilise la commande find avec un d\u00e9lai d&rsquo;attente pour \u00e9viter les recherches trop longues. Cela permet d&rsquo;\u00e9viter qu&rsquo;il ne se bloque ind\u00e9finiment dans les grands r\u00e9pertoires.<\/p>\n<h3>Q\u00a0: Que se passe-t-il si l&rsquo;outil ninjarmm-cli n&rsquo;est pas disponible ?<\/h3>\n<p>R\u00a0: Le script enregistre un avertissement et poursuit son op\u00e9ration. La fonctionnalit\u00e9 de champ personnalis\u00e9 sera ignor\u00e9e si l&rsquo;outil n&rsquo;est pas ex\u00e9cutable.<\/p>\n<h2>Implications<\/h2>\n<p>La possibilit\u00e9 d&rsquo;automatiser les contr\u00f4les d&rsquo;existence des fichiers et des dossiers a des implications significatives pour la s\u00e9curit\u00e9 et la gestion des technologies de l&rsquo;information. Des alertes automatis\u00e9es permettent d&rsquo;identifier rapidement les changements non autoris\u00e9s, les <a href=\"https:\/\/www.ninjaone.com\/fr\/it-hub\/endpoint-security\/qu-est-ce-qu-une-fuite-de-donnees\/\" target=\"_blank\" rel=\"noopener\">violations potentielles<\/a> et les probl\u00e8mes de conformit\u00e9. Cette approche proactive renforce la s\u00e9curit\u00e9 et la fiabilit\u00e9 globales du syst\u00e8me.<\/p>\n<h2>Recommandations<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"6\" data-aria-level=\"1\"><strong>D\u00e9finir des d\u00e9lais d&rsquo;attente appropri\u00e9s :<\/strong> Veillez \u00e0 ce que la valeur du d\u00e9lai d&rsquo;attente soit adapt\u00e9e \u00e0 la taille du r\u00e9pertoire afin d&rsquo;\u00e9viter les interruptions inutiles de scripts.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"7\" data-aria-level=\"1\"><strong>Mettre r\u00e9guli\u00e8rement \u00e0 jour les crit\u00e8res de recherche :<\/strong> Adapter les param\u00e8tres de recherche en fonction de l&rsquo;\u00e9volution des besoins, tels que de nouveaux fichiers ou r\u00e9pertoires critiques.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"8\" data-aria-level=\"1\"><strong>Int\u00e9grer les syst\u00e8mes de surveillance :<\/strong> Utilisez la fonctionnalit\u00e9 de champ personnalis\u00e9 pour int\u00e9grer des syst\u00e8mes de surveillance et d&rsquo;alerte plus vastes, afin d&rsquo;obtenir une vue unifi\u00e9e de la sant\u00e9 et de la conformit\u00e9 du syst\u00e8me.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Les scripts d&rsquo;automatisation tels que celui pr\u00e9sent\u00e9 ici sont des outils inestimables pour les professionnels de l&rsquo;informatique et les MSP. Ils constituent un moyen fiable et <a href=\"https:\/\/www.ninjaone.com\/fr\/efficacite\" target=\"_blank\" rel=\"noopener\">efficace<\/a> de s&rsquo;assurer que les fichiers et les r\u00e9pertoires essentiels sont pr\u00e9sents et corrects. En int\u00e9grant ce script dans vos pratiques de gestion informatique, vous pouvez <a href=\"https:\/\/www.ninjaone.com\/fr\/top-5-des-principes-fondamentaux-de-securite-informatique\" target=\"_blank\" rel=\"noopener\">am\u00e9liorer la s\u00e9curit\u00e9<\/a>, la conformit\u00e9 et l&rsquo;efficacit\u00e9 op\u00e9rationnelle. <a href=\"https:\/\/www.ninjaone.com\/fr\/\" target=\"_blank\" rel=\"noopener\">NinjaOne<\/a> offre une suite d&rsquo;outils qui peuvent compl\u00e9ter ces scripts, fournissant des solutions de gestion informatique compl\u00e8tes adapt\u00e9es \u00e0 vos besoins.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":""},"operating_system":[4211],"use_cases":[4285],"class_list":["post-353649","script_hub","type-script_hub","status-publish","hentry","script_hub_category-linux"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub\/353649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/comments?post=353649"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/media?parent=353649"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/operating_system?post=353649"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/fr\/wp-json\/wp\/v2\/use_cases?post=353649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}