Obtenir le nom et l'extension du fichier à l'aide de Bash
- Obtenir le nom et l’extension du fichier à l’aide de Bash
- Exécuter le fichier Bash pour obtenir le nom et l’extension du fichier
- Problèmes liés aux autorisations
Les scripts Bash sont devenus très populaires ces dernières années, que ce soit pour votre tâche d’administration Linux quotidienne ou pour toute une tâche d’automatisation DevOps.
Supposons que vous vous trouviez dans une situation où vous vouliez extraire un nom de fichier et son extension séparément dans un script bash. Par exemple, il existe un fichier python nommé server.py
. Nous voulons découper cette chaîne en deux parties en séparant le nom server
et l’extension py
.
Obtenir le nom et l’extension du fichier à l’aide de Bash
Nous avons écrit un script bash à des fins de démonstration. Vous pouvez utiliser ce code n’importe où dans votre script si vous le souhaitez.
- Tout d’abord, nous allons vérifier si l’utilisateur a fourni les bons arguments ou non. L’extrait de code suivant utilise une instruction
if
qui devient égale=
à zéro0
, ce qui signifierait qu’aucun argument n’a été fourni ; dans ce cas, nous utiliserionspwd
ou notre répertoire de travail actuel comme argument par défaut.
#!/bin/bash
# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
cDir=$(pwd) # Setting the cDir variable to current directory
echo "[-] No directory provided!"
else
cDir=$1
fi
echo "[+] Setting the directory to $cDir"
- Ensuite, nous vérifions si le répertoire fourni par l’utilisateur existe ou non. S’il n’existe pas, on sort du script.e
# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
echo "[-] Directory $cDir doesn't exist!"
exit
fi
- Maintenant, nous commençons à extraire les fichiers disponibles dans le répertoire (bien sûr, s’il est valide) dans la variable
allFile
à l’aide de la simple commandels
, qui fonctionne aussi bien sous Linux que PowerShell dans les systèmes d’exploitation Windows.
# Main extraction:
allFile=`ls $cDir`
echo;
On vérifie si la dernière valeur du chemin fourni n’est pas /
, et si ce n’est pas le cas, on l’ajoute à la fin pour éviter toute erreur.
# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
cDir+='/'
fi
Ensuite, on itère sur tout ce qui est présent dans le dossier en utilisant for loop
et la variable $allFile
. Rappelez-vous plus tôt que $allFile
a une valeur de ls $cDir
.
# Iterating over everything in the folder
for item in $allFile; do
# Appending path to each file:
item="$cDir$item"
On vérifie si le fichier détecté est de type file
en utilisant le drapeau -f
dans la boucle. Si tel est le cas, nous supprimons la partie point du nom de fichier, par exemple, la partie extension.
Au final, nous imprimons les résultats de la manière souhaitée en utilisant echo
.
# Checking if current item is a file:
if [[ -f $item ]]; then
ext=`ls $item | rev | cut -d '.' -f 1 | rev`
file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
echo "File Name: $file_name -> Extension: $ext"
fi
- Ce script vérifie si un répertoire spécifique existe ou non. Et si le répertoire existe, il mentionnera alors tous les fichiers avec leur extension.
┌─[root@parrot]─[/home/user/Downloads]
└──╼ #./test2.sh
[-] No directory provided!
[+] Setting the directory to /home/user/Downloads
File Name: /home/user/Downloads/ExtraCredit_Sockets_Intro -> Extension: pdf
File Name: /home/user/Downloads/project -> Extension: sh
File Name: /home/user/Downloads/test2 -> Extension: sh
File Name: /home/user/Downloads/test -> Extension: txt
Chaque ligne du code est commentée, vous pouvez donc le vérifier en cas de confusion.
Si vous souhaitez utiliser le script, voici sa version complète.
#!/bin/bash
# Checking if arguments have been provided:
if [[ $# == 0 ]]; then
cDir=$(pwd) # Setting the cDir variable to current directory
echo "[-] No directory provided!"
else
cDir=$1
fi
echo "[+] Setting the directory to $cDir"
# Checking if the directory exists:
if [[ ! -d $cDir ]]; then
echo "[-] Directory $cDir doesn't exist!"
exit
fi
# Main extraction:
allFile=`ls $cDir`
echo;
# Checking if the last value of the path is '/' or not:
if [[ ${cDir: -1} != '/' ]]; then
cDir+='/'
fi
# Iterating over everything in the folder
for item in $allFile; do
# Appending path to each file:
item="$cDir$item"
# Checking if current item is a file:
if [[ -f $item ]]; then
ext=`ls $item | rev | cut -d '.' -f 1 | rev`
file_name=`ls $item | rev | cut -d '.' -f 2 | rev`
echo "File Name: $file_name -> Extension: $ext"
fi
done
Exécuter le fichier Bash pour obtenir le nom et l’extension du fichier
Si vous êtes un débutant essayant d’apprendre bash et que vous ne savez pas comment l’exécuter, utilisez ce code ; tout ce que vous avez à faire est de créer un fichier avec l’extension .sh
, ce qui signifie qu’il s’agit d’un fichier bash.
Après cela, accédez à ce répertoire à l’aide du terminal de votre choix et tapez ./filename
, qui devrait exécuter le fichier.
Si vous êtes sur un système d’exploitation Windows, tapez bash file.sh
, et il devrait fonctionner sans aucun problème.
N’oubliez pas d’utiliser le bon nom de fichier du script dans votre cas.
Problèmes liés aux autorisations
Remarque : Vous pourriez rencontrer une erreur Permission refusée
lors de l’exécution du script.
Vous devez fournir les bonnes autorisations en utilisant chmod +x [nom de fichier]
dans le terminal.
Exécutez PowerShell ou l’invite de commande en tant qu’administrateur si vous utilisez Windows pour éviter tout problème lié aux autorisations.