Как предоставить полный доступ к указанному каталогу?

Основная проблема с вашим кодом заключается в том, что вы собираете все имена путей в переменную, а затем выполняете цикл для вызова basename. Это делает его медленным.

Цикл также проходит через раскрытие переменной без кавычек ${PATHLIST}, что было бы неразумно, если имена путей содержат пробелы или символы оболочки. Вbash(или других оболочках, которые его поддерживают ), вместо этого можно было бы использовать массив.

Предложение:

$ sed -e '1d' -e 's/^[^;]*;//' -e 's/;.*//' file.csv | sort -u | sed 's#.*/##' | sort | uniq -d
quad_list_14.json

Первый sedвыбирает пути (и отбрасывает строку заголовка ). Это также может быть записано как awk -F';' 'NR > 1 { print $2 }' file.csvили как tail -n +2 file.csv | cut -d ';' -f 2.

sort -uдает нам уникальные пути, а следующий sedдает нам базовые имена. Окончательный sortс uniq -dв конце говорит нам, какие базовые имена дублируются.

Последнее sed 's#.*/##', которое дает вам базовые имена, напоминает расширение параметра ${pathname##*/}, которое эквивалентно $( basename "$pathname" ). Он просто удаляет все до и включая последний /в строке.

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


Альтернатива просмотру только IN_OPENзаписей:

sed -e '/;IN_OPEN;/!d' -e 's/^[^;]*;//' -e 's/;.*//' file.csv | sort -u | sed 's#.*/##' | sort | uniq -d
-1
03.02.2020, 11:02
2 ответа

Ознакомьтесь со списками ACL (Списками контроля доступа ), они обеспечивают более точное управление доступом, чем грубая группа владельцев --других моделей Unix. Однако не все файловые системы их поддерживают.

2
28.04.2021, 23:24

Вы можете использовать команду setfaclдля определенной папки и пользователя.

для пользователя;

sudo setfacl -Rm d:u:new_user:rwx /home

для группы;

sudo setfacl -Rm d:g:new_user:rwx /home

для проверки разрешений;

getfacl /home
0
28.04.2021, 23:24

Теги

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