Trying to perform a recursive chmod on all the .sh files in a directory to make them executable
2 Answers
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:
-type f
: Normal files only (skip directories, symlinks, named pipes and sockets, and the special files found in /dev)-iname
: Ignore case in the name"*.sh"
: Globbing, telling thefind
command to search for files with ".sh" extension-exec chmod +x {}
: This tells thefind
command to carry out achmod
command on each found file. Making each executable\;
: Indicating end of command
-
3I think that you could end your find command with
+
to minimize the number of execution (see the difference between terminating exec with\;
vs+
).– ncenerarMay 3, 2021 at 9:31 -
chmod u+x /dir_of_interest/**/*.sh
-
-
Works. But if there are too many files to update
unable to execute /usr/bin/chmod: Argument list too long
error occurs. Then we can use the answer by @George Udosen.– WenukaNov 16, 2022 at 8:23
find
and maybexargs
.