• 0 Posts
  • 6 Comments
Joined 1 year ago
cake
Cake day: June 13th, 2023

help-circle




  • 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.