|
|
|
|
|
by amiga386
636 days ago
|
|
Personally I skip the middleman when I can with "find ... -exec cmd {} +" find . -type d -exec chmod g+s {} +
Or even minimise arguments by including a test if the chmod is even needed: find . -type d \! -perm -g=s -exec chmod g+s {} +
I actually have a script that fixes up permissions, and I was delighted to fit it in a single find invocation which only performs a single stat() on each file in the traversal, and only executes chown/chmod at all for files that need change: # - ensure owner is root:shared
# - ensure dirs have 775 permissions (must have 775, must not have 002)
# - ensure files have 775 (if w+x), 664 (if w), 555 (if x) otherwise 444 permissions
find LIST OF DIRS \
'(' \! '(' -user root -group shared ')' -print -exec chown -ch root:shared {} + ')' , \
'(' -type d \! '(' -perm -775 \! -perm -002 ')' -print -exec chmod -c 775 {} + ')' , \
'(' -type f -perm /222 -perm /111 \! -perm 775 -print -exec chmod -c 775 {} + ')' , \
'(' -type f -perm /222 \! -perm /111 \! -perm 664 -print -exec chmod -c 664 {} + ')' , \
'(' -type f \! -perm /222 -perm /111 \! -perm 555 -print -exec chmod -c 555 {} + ')' , \
'(' -type f \! -perm /222 \! -perm /111 \! -perm 444 -print -exec chmod -c 444 {} + ')'
But if you need multiple transformations of filenames in a pipeline like in your second example, then yes xargs will be involved. |
|