

assuming you have a GNU toolchain you can use the find command like so:
find . -type f -executable -exec sh -c '
case $( file "$1" ) in (*Bourne-Again*) exit 0; esac
exit 1' sh {} \; -print0 | xargs -0 -I{} cp {} target/
This first finds all executable files in the current directory (change the “.” arg in find to search other dirs), uses the file command to test if it’s a bash file, and if it is, pipes the file name to xargs which calls cp on each file.
note: if “target” is inside the search directory you’ll get output from cp that it skipped copying identical files. this is because find will find them a free you copy them so be careful!
note 2: this doesn’t preserve the directory structure of the files, so if your scripts are nested and might have duplicate names, you’ll get errors.

SMS is literally the bottom of the barrel though