Разве Вы не хотите использовать loginhooks для этого?
выборка того потока
loginhook
Это - место, где можно присоединить сценарий, поскольку пользователь входит в систему. Вы - все еще пользователь root на время сценария, но сразу после того, как сценарий заканчивает Вас, становятся входящим в систему пользователем.
Правка: Проблема с вашим примером выше в том, что вы работаете с текущей папкой (...). Раздел памяти моего примера исключает текущую папку из списка файлов/директорий, которые будут изменены.
Print0 изменяет вывод находки на ноль-терминал, и xargs оперирует над каждой строкой (или нулевой строкой, с -0) и запускает указанную команду с Вашим вводом в конце (в данном случае, с именем каждого файла). Вы можете изменить команду xargs, чтобы она была более явной:
Таким образом, вы можете поместить вывод find куда угодно в своей команде. [1131151]
Пример
VBoxManage internalcommands createrawvmdk -filename C:\Users\YGomez\mydisk.vmdk -rawdisk \\.\PhysicalDrive0
.[1131632] каталог до.
Измените только содержимое dir.
Содержимое после.
VBoxManage internalcommands createrawvmdk -filename C:\Users\YGomez\fedoraparts.vmdk -rawdisk \\.\PhysicalDrive0 -partitions 2,3,4
Тем временем каталог, [1131633].[1131634] остается нетронутым.
grub-install /dev/sda2
Если есть скрытые файлы, обязательно настройте оболочку так, чтобы она включала их в глобус: [1131635]shopt -s dotglob[1131636] in bash, [1131637]FIGNORE='@(.|...)'[1131638] in ksh93, [1131639]setopt dot_glob[1131640] in zsh.
Или добавьте шаблон, который соответствует им (остерегайтесь, что в оболочках, отличных от zsh, [1131641].*[1131642] будут совпадать [1131643].[1131644] и [1131645]... [1131646]):
Или в zsh, просто
Квалификатор глобуса [1133529]D[1133532] означает, что файлы точек будут совпадать.
Вы можете заставить [1133533]chown[1133534] выполнить рекурсивный обратный путь вместо оболочки:
Если вы беспокоитесь о том, что файлов так много, что командная строка будет слишком длинной, загрузить
chown[1133913] builten[1133536] из [1133537]zsh/files module[1133538]. Если вы не хотите, чтобы [1133539]chown[1133540] ссылался на builtin, вы можете загрузить только имена [1133541]zf_*[1133542]:
Когда вам нужно вызвать внешнюю команду (что здесь не так) из длинного списка файлов, которые могут не вписываться в лимит командной строки, вы можете использовать функцию
zargs
:
Ниже приведена команда для рекурсивного изменения владельца каталогов и их подкаталогов -и всех файлов в них.
$ chown -R <username> <folder_to_change_ownership>
Шаг 1:Найдите имя пользователя, выполнив следующую команду
$ whoami
это выведет имя пользователя (ваше имя пользователя будет тем, которое вы установили)
manojselvin
Шаг 2:Скопируйте имя пользователя из предыдущего шага и замените в команде следующим образом
$ chown -R manojselvin myfolder
Эта команда изменит владельца всех каталогов и подкаталогов -на указанное имя пользователя. В данном случае это «манойсельвин»
.Шаг 3:Чтобы проверить, был ли изменен владелец, выполните следующую команду, где находится каталог, например. моя папка в этом случае.
$ ls -la
это выведет информацию о владельце каталогов, как показано ниже
drwxr-xr-x 2 manojselvin manojselvin 4096 Jun 18 16:00 myfolder
как вы можете видеть, владельцем теперь является «manojselvin», это имя пользователя, которое мы использовали в этом случае.для других будет отображаться их имя пользователя или имя группы, которое было установлено
Ответ Криса Дауна может не сработать, если в первом каталоге много файлов.
find. \! -iname. -exec chown user:group {} \;
В большинстве случаев ответ Криса Дауна, вероятно, не подведет и, вероятно, будет быстрее, чем этот ответ, но я хотел ответить на ваш вопрос именно так, как вы его задали.
Кроме того, вот немного другая команда, которая лучше сработала для моего случая. Я не люблю менять каталоги в своих скриптах, поэтому вместо этого я написал такую команду:
find /foo/bar/baz \! -samefile /foo/bar/baz -exec chown user:group {} \;