Сценарий для сглаживания вложенных каталогов

sg позволяет переключить основную группу на другую дополнительную группу (т. Е. Группу, для которой пользователь указан в / etc / group ) без аутентификации, или переключить основную группу на группу, указанную в / etc / group , введя пароль, указанный в / etc / group или / etc / gshadow . Таким образом, использование sg , «без ввода паролей» и «не должен быть членом этой группы» противоречат друг другу.

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

Конфигурация, которую вы пробовали, с пользователем, указанным в gshadow , но не в группе , не является поддерживаемой конфигурацией. Тот факт, что он дал что-то близкое к тому, что вы хотели, на самом деле кажется мне ошибкой - gshadow не должен предоставлять членство в группах, которые не указаны в group . В руководстве указано: «Вам следует использовать тот же список пользователей, что и в / etc / group ». Если вы нарушите эту рекомендацию, не рассчитывайте на разумное или переносимое поведение.

Если вы хотите разрешить пользователю запускать определенную команду как группу, с ведением журнала, вы можете использовать sudo. Запустите visudo и добавьте такую ​​строку после любого не- NOPASSWD , как это может касаться этого пользователя :

morfik ALL = (morfik:audio) NOPASSWD: pulseaudio

1
04.07.2018, 06:25
2 ответа

Один из способов выполнить определенную операцию для всех каталогов, найденных в данном каталоге,

setopt -s nullglob
for e in SPECIFIED_DIRECTORY/*
do
  setopt -u nullglob
  [[ -d $e ]] && YOUR_SCRIPT "$e"
done

Обратите внимание, что при этом будут пропущены каталоги, имя которых начинается с точки. Обычно это то, что нам нужно, но если вы хотите включить и эти каталоги, вы можете адаптировать мое решение и к этому случаю. :См. параметр dotglobна странице руководства и не забудьте исключить специальные каталоги .и ...

Другой возможностью является использование чего-то вроде

find SPECIFIED_DIRECTORY -maxdepth 1 -type d -exec YOUR_SCRIPT {} \;
1
27.01.2020, 23:23

Всего одна строка переместит все файлы (в дочерних подкаталогах )в pwd.

$ find . -mindepth 2 -type f -exec mv {}.. \;

При этом будут перемещены все обычные файлы, включая файлы с точкой -(, начинающиеся с точки ), но не ссылки.

Затем удалите пустые каталоги:

$ find. -type d -empty -delete

То, что осталось, содержит ссылки (или другие типы файлов ), которые не были перемещены.

Если вам нужен скрипт, используйте:

#!/bin/bash

fullpath=${1:-.}

( cd "$fullpath";
  find . -mindepth 2 -type f -exec mv {}.. \;
  find. -type d -empty -delete
)

Вызовите скрипт как:script /the/path/you.want

3
27.01.2020, 23:23

Теги

Похожие вопросы