Home > front end >  traverse through folder and do something with specific file types
traverse through folder and do something with specific file types

Time:02-05

I'm working on a bash script that should go through a directory and print all files and if it hits a folder it should call it's self and do it again. I believe my problem lies with if [[ $file =~ \.yml?yaml$ ]]; when I remove the tilda it runs but not correctly if [[ $file = \.yml?yaml$ ]]; It returns "this a file isn't need -> $file" even though it's a yaml.

#!/bin/bash

print_files_and_dirs() {
for file in $1/*;
   do
        if [ -f "$file"  ];
        then
                if [[ $file =~ \.yml?yaml$ ]];
                then
                        echo "this is a yaml file! -> $file"
                else
                        echo "this a file isn't need -> $file"
                fi
        else
                print_files_and_dirs $file
        fi
   done
}


print_files_and_dirs .

CodePudding user response:

Maybe you can use find to find the yaml files and do something with them.

find "$PWD" \
  -type f \( -name "*.yaml" -or -name "*.yml" \) \
  -exec echo found {} \;

If you only want the file name without the path, you could use printf to get the names and pipe it to xargs.

find "$PWD" \
  -type f \( -name "*.yaml" -or -name "*.yml" \) \
  -printf '%f\n' \
  | xargs -I{} echo found {}
  •  Tags:  
  • Related