I had a bunch of dll's I had checked out of a subversion repo that needed to have the execute bit set on them.
Enter the find command.
I have never had a great grasp on how to use find, but finally my laziness got the best of me such that I not only figured out how to use it to find the files I wanted, but also how to send them through xargs to make the change.
So here's the command I used:
find . -name '*.dll' ! -perm -a+x -print | xargs chmod +x
And here's the breakdown of the arguments
.
Is the directory we start our search from
-name
Says that the next argument is the name of the file we are searching for
'*.dll'
Is the pattern of the file we are looking for. In this case we are looking for *.dll or any file that ends with a .dll extension
!
Says to negate the next argument
-perm
Says that the next argument will be some type of expression that qualifies the file based on its permissions
-a+x
There are multiple parts to this. The first - says that any permissions can match, if that wasn't there then the match would need to be exact? a+x (see man chmod(1)) is a way to specify permissions. It goes [user or group][operator][permission] so in this case it says ll(user, group, owner) [+]have e[x]ecute
-print
To be honest I'm not sure why this is needed, but all the examples I found with find and xargs seemed to use it
Then the point of xargs is to take the output of the previous command and pass it as input to the command (in this case chmod +x)