sous - trouver le chemin d'un fichier linux




Rechercher récursivement des fichiers avec une extension spécifique (6)

  1. Il y a un { manquant après browsefolders ()
  2. Tout $in devrait être $suffix
  3. La ligne avec cut vous obtient seulement la partie médiane de front.middle.extension . Vous devriez lire le manuel de votre shell sur ${varname%%pattern} et vos amis.

Je suppose que vous faites cela comme un exercice de script shell, sinon la solution de find déjà proposée est la voie à suivre.

Pour vérifier la syntaxe du shell, sans exécuter de script, utilisez sh -n scriptname .

J'essaie de trouver tous les fichiers avec une extension spécifique dans un répertoire et ses sous-répertoires avec mon bash (Dernière version d'Ubuntu LTS).

C'est ce qui est écrit dans un fichier de script:

#!/bin/bash

directory="/home/flip/Desktop"
suffix="in"

browsefolders ()
  for i in "$1"/*; 
  do
    echo "dir :$directory"
    echo "filename: $i"
    #   echo ${i#*.}
    extension=`echo "$i" | cut -d'.' -f2`
    echo "Erweiterung $extension"
    if     [ -f "$i" ]; then        

        if [ $extension == $suffix ]; then
            echo "$i ends with $in"

        else
            echo "$i does NOT end with $in"
        fi
    elif [ -d "$i" ]; then  
    browsefolders "$i"
    fi
  done
}
browsefolders  "$directory"

Malheureusement, quand je lance ce script en terminal, il est dit:

[: 29: in: unexpected operator

(avec $extension au lieu de 'in' )

Que se passe-t-il ici, où est l'erreur? Mais cette accolade


La syntaxe que j'utilise est un peu différente de celle suggérée par @Matt:

find $directory -type f -name \*.in

(c'est une frappe de moins).


Sans utiliser find :

du -a $directory | awk '{print $2}' | grep '\.in$'

find $directory -type f -name "*.in"

est un peu plus court que tout ce truc (et plus sûr - traite des espaces dans les noms de fichiers et de répertoires).

Votre script échoue probablement pour les entrées qui n'en ont pas . dans leur nom, rendant $extension vide.


find {directory} -type f -name '*.extension'

Exemple pour trouver tous les fichiers CSV dans le répertoire courant et ses sous-répertoires

find . -type f -name '*.csv'

for file in "${LOCATION_VAR}"/*.zip
do
  echo "$file"
done 






recursion