Compter le nombre de fichiers dans un répertoire dans bash

J’ai un script bash où j’essaie de trouver le nombre de fichiers dans un répertoire et d’y effectuer une opération supplémentaire.

Mais en faisant la même chose, je reçois l’erreur comme suit:

admin> ./fileCount.sh 1 ./fileCount.sh: line 6: 22 + : syntax error: operand expected (error token is " ") 

Mon script est comme indiqué:

 #!/usr/bin/bash Var1=22 Var2= ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l Var3= $(($Var1 + $Var2)) echo $Var3 

Quelqu’un peut-il indiquer où est l’erreur.

Quelqu’un peut-il indiquer où est l’erreur.

  • Vous ne devriez pas avoir d’espaces autour de = .
  • Vous avez probablement voulu utiliser la substitution de commandes pour capturer le résultat dans Var2 .

Essayer:

 Var1=22 Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l) Var3=$(($Var1 + $Var2)) echo $Var3 

De plus, vous pourriez aussi dire

 Var3=$((Var1 + Var2)) 

Un peu loin

Comme @devnull a déjà répondu à la question, indiquez où est l’erreur ,

Juste quelques idées supplémentaires:

Général unix

Pour effectuer ce type de navigation, il existe une commande très puissante qui vous permet de trouver récursivement ce que vous recherchez:

 Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l` 

Si vous ne voulez pas que cela soit récursif:

 Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l` 

Si vous ne voulez que des fichiers (c’est-à-dire sans lien symbolique, ni répertoires)

 Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l` 

Et ainsi de suite … Veuillez lire la page de manuel: man find .

Solutions de bash particulières

Comme votre question concerne bash , il y a un certain bashisme que vous pourriez utiliser pour rendre cela plus rapide:

 #!/bin/bash Var1=22 VarLs=(/stud_data/Input_Data/test3/*.txt) [ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0 Var3=$(( Var1 + Var2 )) echo $Var3 # Uncomment next line to see more about current environment # set | grep ^Var 

Où l’extension bash traduira /path/*.txt dans un tableau contenant tous les noms de fichiers correspondant au formulaire jocker.

S’il n’y a pas de fichier correspondant au formulaire, VarLs ne contiendra que le formulaire jocker lui-même.

Donc, le test -e corrigera ceci: Si le premier fichier de la liste renvoyée existe, puis assigne le nombre d’éléments de la liste ( ${#VarLs[@]} ) à Var2 sinon, affectez 0 à Var2 .