35

Я ищу команду Linux, которая может изменить владельца всех файлов, принадлежащих данному пользователю, предпочтительно в целевом каталоге, другому указанному пользователю.

Команда моей мечты будет выглядеть примерно так ...

chuser -R --olduser tom --newuser jerry

или же

chuser -R --olduser 1066 --newuser 1492

Это мой сценарий ... У меня есть резервный файл (.tgz) с информацией о пользователях и группах. Он был взят с веб-сервера под управлением Apache и MySQL. Файлы в резервной копии находятся по всей системе и содержат файлы от нескольких разных пользователей и нескольких учетных записей системного типа, и важно, чтобы при восстановлении на новом сервере параметры не терялись. Проблема в том, что у пользователей на машине файлы восстанавливаются, чтобы не совпадать с теми, что в файле резервной копии. Например, на обеих машинах был пользователь MySQL, но у них разные идентификаторы пользователей, и на обеих машинах было несколько идентификаторов пользователей, принадлежащих разным пользователям. Это означает, что нет возможности синхронизировать пользователей на новом компьютере с пользователями на старом компьютере.

Я могу найти все файлы пользователей с помощью команды find, как это ...

find /decompressed-backup-dir -uid 1050

или же

find /decompressed-backup-dir -user tom

Если, как я подозреваю, нет способа сделать то, что я хочу, с помощью одной команды, то, возможно, есть способ передать результаты команды find другой команде для обработки изменения владельца?

Я мог бы сделать это с помощью скрипта PHP, но в резервной копии есть 4 ГБ и десятки тысяч файлов, поэтому я не хочу использовать PHP или Perl, но я был бы рад сценарию оболочки, который мог бы справиться с этим.

6 ответов6

56

Я думаю, что флаг --from в команде chown, вероятно, самый простой способ.

chown --from=oldguy newguy * -R
25

Что-то вроде

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
6

Вы можете использовать find , как кто-то еще написал, чтобы сделать chown .

Однако вам может и не понадобиться, так как tar позаботится обо всем за вас.

Например, если вы создаете tar на machine A где пользователь tom имеет uid 500 а затем untar файл на machine B где пользователь tom имеет uid 505 , tar сделает правильные вещи и создаст файлы, принадлежащие uid 505 .

5

В дополнение к ответу SiteKickr, chgrp не имеет аргумента --from , но вы можете добиться того же с помощью chown , опуская пользователя.

Пример:

chown -R --from=:currentgroup :newgroup /some/directory
1

Ответ устанавливает и пользователя, и группу:

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

но если вы хотите изменить ТОЛЬКО группу файлов, принадлежащих какому-либо пользователю, вы не можете использовать chown (насколько я знаю), но вместо этого используйте chgrp:

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

и изменить ТОЛЬКО группу файлов, принадлежащих какой-либо группе, которую вы должны использовать, например:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

Просто чтобы добавить знания.

-2

Вы можете использовать chown - R /directory/file

Эта команда изменит разрешение для всех экземпляров каталога chown - R /directory

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .