Obtenir le nom et l'extension du fichier à l'aide de Bash

Ozair Malik 30 janvier 2023
  1. Obtenir le nom et l’extension du fichier à l’aide de Bash
  2. Exécuter le fichier Bash pour obtenir le nom et l’extension du fichier
  3. Problèmes liés aux autorisations
Obtenir le nom et l'extension du fichier à l'aide de Bash

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éro 0, ce qui signifierait qu’aucun argument n’a été fourni ; dans ce cas, nous utiliserions pwd 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 commande ls, 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
Remarque
Nous exécutons le script sans aucun répertoire fourni comme argument, il considère donc les téléchargements, c’est-à-dire mon répertoire actuel, par défaut et mentionne tous les noms de fichiers et leurs extensions présents dans ce répertoire.

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.

Article connexe - Bash File