Использование подстановочных знаков для -group или -user с командой find

Я столкнулся с другим вопросом в AskUbuntu, на который был хороший ответ , но мне пришлось немного изменить его, чтобы системы.

Комментарии Луиса и Сергея. Я придумал это решение, которое работает для меня в Ubuntu 16.04 (Xenial), и я буду использовать его в других системах Linux, которые я использую.

Я установил xcape и поместил следующие строки кода в свой файл .profile в моем домашнем каталоге.

ОБНОВЛЕННЫЙ СПОСОБ:

Из-за того, что различные диспетчеры дисплея (gdm / kdm / sddm / и т. Д.) Ведут себя странно и сбрасывают setxbmap после приостановки / возобновления или блокировки / разблокировки, я обнаружили, как установить параметры таким образом, чтобы они наследовали их и не сбрасывали их все время. Поскольку я часто приостанавливаю и возобновляю работу, мне нужно было убедиться, что у меня не запущено много копий xcape , что решено в новом скрипте ниже.

Сначала измените конфигурацию клавиатуры с помощью sudo gedit / etc / default / keyboard и установите XKBOPTIONS = "ctrl: nocaps" , а затем в вашем ~ / .xprofile поместите единственную строку ниже.

ps aux | grep -i '[x]cape' && killall -9 xcape; hash xcape 2>&1 >/dev/null && xcape -e 'Control_L=Escape' -t 100 &

Надеюсь, различные разделы скрипта сэкономят вам время / проблемы и предотвратят зависание входа в систему.Сначала он проверяет, запущен ли уже экземпляр, и убивает его, поскольку единственное, что делает xcape , - это сопоставляет Ctrl с Esc, это безопасно, тогда часть хэша гарантирует, что у вас есть xcape установлен, иначе ваша система может зависнуть при попытке входа в систему, потому что все сценарии запуска должны завершиться без ошибок.

Старый способ:

setxkbmap -option 'caps:ctrl_modifier'; xcape -e '#66=Escape'

Сергей:

Я использовал gnome-tweak-tool для сопоставления Caps Lock и Ctrl, так как в Ubuntu 14.04 в системных настройках нет раскладки клавиатуры. Тогда xcape -e 'Control_L = Escape' не сработал, но после использования xcape -d я обнаружил, что Caps Lock генерирует ключевой код 66 и переназначил его соответственно: xcape -e '# 66 = Escape'. - Сергей Белозёров 4 сен. '14 в 10:08

Луи:

Согласно этому сообщению в блоге, это можно сделать только с помощью xcape: setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape' - Луи Симоно, 4 августа 2015 г., 10:06

1
28.03.2019, 06:07
2 ответа

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

#!/bin/bash

# The beginning of the userids we need to match
match=br

# Find the matching set of users
users=($(
    getent passwd |
    awk -F: -vm="$match" 'BEGIN { re = "^" m } $1 ~ re {print $1}'
))

# Build the list of users ("find ( -user XX -o -user YY -o user ZZ )...")
finds=()
for user in "${users[@]}"
do
    finds+=('-o' '-user' "$user")
done
[[ ${#finds[@]} -gt 0 ]] && finds=('(' "${finds[@]:1}" ')')

# Execute the find command with the set of users
find. "${finds[@]}" -ls

Как всегда, вы можете добавить к команде findпрефикс, например, echo, чтобы увидеть, что будет выполнено. (Или вы можете запустить с bash -x, чтобы включить отчет об отладке строки -по -.)

1
27.01.2020, 23:41

Если все, что вам нужно, это просто листинг, я бы выбрал старый добрый grepвместо вывода find. Это было бы медленнее, но гораздо меньше печатать.

В самом простом случае вы можете попробовать это для вашего примера:

find -printf '%u %p\n' | egrep '^br_'

Это дает вам список файлов, принадлежащих пользователям br_*, показанный с именем пользователя и именем файла в каждой строке.

Затем вы можете расширить вывод, изменив -printfстроку формата  .

Например, чтобы он больше походил на lsвывод:

find -printf '%-8.8u %-8.8g %M %8s %t %p\n' | egrep '^br_'

Чтобы сделать командную строку максимально короткой, важно поместить имя пользователя в самое начало, чтобы часть egrepможно было сделать такой короткой.

Чтобы увидеть все, что можно указать в строке формата, перейдите сюда , затем найдите -printf format.

Будьте осторожны, если ваши файлы содержат символы новой строки в именах, это решение может иметь проблемы с их отображением.

0
27.01.2020, 23:41

Теги

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