LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Replacing owner of Directories (https://www.linuxquestions.org/questions/linux-newbie-8/replacing-owner-of-directories-757316/)

bridrod 09-23-2009 01:20 PM

Replacing owner of Directories
 
I have an interesting task in front of me. For reasons not important right now, I had to change the UID from a user from 105 to 700. Now, as expected all files and dirs are showing with 105. I need to replace all dirs/files with the new UID. How can I do that?

I tried using LS and FIND and grep the output file. The idea I had was to then use CHOWN but an easier way gotta be out there. There are thousands of files and dirs... :cry:

-ROD

kirukan 09-23-2009 01:31 PM

If you want to do the change to all file then why do you want to use find, grep, ls

Ex:-
chown apache:apache *
this will change user and group as apache within a directory where you are

bridrod 09-23-2009 02:43 PM

Quote:

Originally Posted by kirukan (Post 3694559)
If you want to do the change to all file then why do you want to use find, grep, ls

Ex:-
chown apache:apache *
this will change user and group as apache within a directory where you are

My problem is that I have other users (including root) with rights. If I do the above, I will be replacing those too... To avoid that, I would have to re-issue the command multiple times.

-Rod

lutusp 09-23-2009 05:31 PM

Quote:

Originally Posted by bridrod (Post 3694647)
My problem is that I have other users (including root) with rights. If I do the above, I will be replacing those too... To avoid that, I would have to re-issue the command multiple times.

-Rod

You are not being clear. Do you want to change the permissions of directories only, files only, or both? Do you want to change ownership only of specific files belonging to a particular user?

Here's how to do the second (filter specific user, change ownership of only those files):

Code:

find $path -type f -user "oldusername" | while read filepath
do
  chown newuser.newgroup $filepath
done

This will change ownership of files owned by "oldusername" to newuser.newgroup in the specified path and all subdirectories. This has to be run as root, so be careful.

AnanthaP 09-23-2009 06:58 PM

I would go with the find command. In find, by default, the depth parameter is on, ie find traverses all sub directries by default.

find /(start from root) ... -exec

So all you got to do is to:
(1) Test it in a sub directory with about two levels.
(2) Once done, backup the file system and run the single find command.

End

chrism01 09-23-2009 07:19 PM

Something like

Code:

for file in $(find / -uid 105 -print 2>/dev/null)
do
    echo chown 700 $file
done

Test with the echo cmd there, remove echo if you are happy. Needs to run as root.

lutusp 09-23-2009 07:28 PM

Quote:

Originally Posted by chrism01 (Post 3694895)
Something like

Code:

for file in $(find / -uid 105 -print 2>/dev/null)
do
    echo chown 700 $file
done

Test with the echo cmd there, remove echo if you are happy. Needs to run as root.

This fails for paths with whitespace. It also enters places no one should go, like /proc (which will include processes owned by most users), and tries to chown things located there. Newbies need to be warned of the risks in basing a search at '/'.

AlucardZero 09-23-2009 08:17 PM

Does no one know -exec?

Code:

find / -uid 105 -exec chown 700 '{}' \;

kirukan 09-24-2009 07:51 AM

Quote:

change the UID from a user from 105 to 700. Now, as expected all files and dirs are showing with 105. I need to replace all dirs/files with the new UID.
Is this mean you need to change username only for all file and directory(within in a specific location)?
Am i correct?

#chown 700 *
is this not correct?

bridrod 09-24-2009 08:23 AM

Quote:

Originally Posted by lutusp (Post 3694814)
You are not being clear. Do you want to change the permissions of directories only, files only, or both? Do you want to change ownership only of specific files belonging to a particular user?

Here's how to do the second (filter specific user, change ownership of only those files):

Code:

find $path -type f -user "oldusername" | while read filepath
do
  chown newuser.newgroup $filepath
done

This will change ownership of files owned by "oldusername" to newuser.newgroup in the specified path and all subdirectories. This has to be run as root, so be careful.

Thank you guys for all the input. I will be testing the different suggestions.

Yes, i need to filter specific user, change the ownership of files AND directories without affecting the other users.

bridrod 09-24-2009 03:33 PM

Quote:

Originally Posted by bridrod (Post 3695511)
Thank you guys for all the input. I will be testing the different suggestions.

Yes, i need to filter specific user, change the ownership of files AND directories without affecting the other users.

Just an update for you guys. I created a 4 level path. Changed rights to folders, files and both.

Both suggestions worked like a charm:
--------------------------------------------
script #1:

find / -uid 666 -exec chown root '{}' \;
--------------------------------------------
script #2:

for file in $(find / -uid 666 -print 2>/dev/null)
do
chown root $file
done
--------------------------------------------

Thank you very much!


All times are GMT -5. The time now is 07:43 AM.