29

Trying to perform a recursive chmod on all the .sh files in a directory to make them executable

1
  • Look into find and maybe xargs.
    – fkraiem
    Mar 4 '17 at 2:37
46

To make this possible you can use the find command and search for all files with a .sh extension and then run the chmod command on each one found:

find /directory/of/interest/ -type f -iname "*.sh" -exec chmod +x {} \;

Information:

  1. -type f: Normal files only (skip directories, symlinks, named pipes and sockets, and the special files found in /dev)
  2. -iname: Ignore case in the name
  3. "*.sh": Globbing, telling the find command to search for files with ".sh" extension
  4. -exec chmod +x {}: This tells the find command to carry out a chmod command on each found file. Making each executable
  5. \;: Indicating end of command
2
  • 2
    I think that you could end your find command with + to minimize the number of execution (see the difference between terminating exec with \; vs +).
    – ncenerar
    May 3 '21 at 9:31
  • Do you mean terminating exec with \; vs \+? Jun 29 '21 at 19:16
0
chmod u+x /dir_of_interest/**/*.sh

Credit to: https://www.commandlinefu.com/commands/view/11936/recursive-chmod-all-.sh-files-within-the-current-directory

1
  • You need shopt -s globstar in bash for that to work.
    – muru
    May 5 '21 at 16:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.