Это невозможно в том смысле, что вы можете предоставить аргументы для rpm, например при установке ваших пользовательских пакетов, чтобы переопределить значения, содержащиеся в пакете. Но вы можете добавить логику в сценарии оболочки, которые запускаются во время установки rpm, и, следовательно, можете делать свои настройки таким образом.
Fedora по умолчанию добавляет / удаляет пользователей с помощью некоторых скриптлетов, подробности см. В вики Fedora: https://fedoraproject.org/wiki/Packaging:UsersAndGroups и некоторую общую информацию о% post /% и все варианты см. объяснение в книге Max RPM по адресу http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html (раздел «Сценарии установки / стирания») и для заказа, возможно, https://fedoraproject.org/wiki/Packaging:Scriptlets . Для получения более подробной информации см. http://wiki.networksecuritytoolkit.org/nstwiki/index.php/RPM_Quick_Reference
Итак, для вашего конкретного вопроса вы можете попробовать прочитать переменные для имени пользователя, имени группы, поле gecos или что-то еще (значения, которые должны быть настроены в целевой системе) из некоторого стандартного места, например / etc / sysconfig / custom_defaults
или что-то в этом роде. Таким образом, это настраивается каждым клиентом, но вы должны выполнить некоторые проверки корректности переменных и предоставить значения по умолчанию, если пользовательские значения по умолчанию не установлены, но это то же самое для всех сценариев оболочки в целом.
Предполагая, что файлы изображений JPEG имеют суффикс.jpg
:
find "$HOME" -type f -name '*.jpg' \
-exec sh -c 'for d; do dirname "$d"; done' sh {} + | sort -u -o jpeg_dirs.txt
Это зависит от того, что у вас нет броских имен каталогов с символами новой строки в именах.
С помощью GNUfind
:
find "$HOME" -type f -name '*.jpg' -printf '%h\n' | sort -u -o jpeg_dirs.txt
Эти find
команды найдут все изображения JPEG в вашем домашнем каталоге и напечатают имена каталогов, в которых они были найдены. sort -u
возьмет этот список имен каталогов, отсортирует его и удалит дубликаты. Результат будет записан в файл jpeg_dirs.txt
в текущем каталоге.
Оглядываясь назад на это в начале 2021 года (3,3 года спустя )я немного съеживаюсь, потому что мое решение, приведенное выше, хотя и не является неверным само по себе, немного назад. Это также делает очевидное предположение о «хороших именах файлов» (без новых строк ).
Когда вы используете find
для поиска каталогов, не ищите обычные файлы, как я сделал выше; на самом деле искать каталоги. Когда у нас есть каталоги, мы можем заглянуть в каждый из них и посмотреть, соответствует ли файл *.jpg
или*.JPG
(дополнительные суффиксы имени файла, которые легко добавить):
find "$HOME" -type d -exec bash -O nullglob -O dotglob -O extglob -c '
for dirpath do
set -- "$dirpath"/*.@(jpg|JPG)
[[ "$#" -gt 0 ]] && printf "%s\n" "$dirpath"
done' bash {} +
Это заглядывает в каждый каталог из вашего домашнего каталога и пытается расширить шаблон подстановки *.@(jpg|JPG)
в каждом. Этот шаблон, который также можно было бы записать как два отдельных шаблона, *.jpg
и *.JPG
, соответствует всем файлам, которые мы ищем. Если одно имя совпадает, мы предполагаем, что это каталог, имя которого мы хотим вывести.Это даст ложные срабатывания для каталогов, которые содержат только подкаталоги с этими суффиксами.
Параметры оболочки, с которыми мы запускаем наш внутренний bash
скрипт, позволяют нам сопоставлять скрытые имена (dotglob
), позволяют полностью исчезнуть шаблону подстановки, если он не соответствует чему-либо, вместо того, чтобы оставаться нераскрытым (nullglob
), и позволяют мы используем вдохновленныйksh
-расширенный шаблон подстановки @(...|...)
.
Использование оболочки zsh
:
typeset -U list=(~/**/*.(jpg|JPG)(.DN:h))
print -rC1 $list
Это создает переменную массива, list
, которая имеет свойство хранить только уникальные элементы. Он инициализируется в результате расширения шаблона подстановки имени файла. Шаблон соответствует всем файлам изображений JPEG в или ниже домашнего каталога, а :h
в конце удаляет фактическое имя файла из сгенерированных путей. .
заставляет шаблон соответствовать только обычным файлам, а D
и N
действуют как dotglob
и nullglob
в bash
.
find. -iname '*.jpg' -execdir sh -c 'pwd' _ {} + | sort -u > dirs_with_jpegs.txt
Должно работать достаточно хорошо, если предположить, что ваша реализация find
поддерживает-execdir
(скорее всего ). -execdir
выполняет команду в каталоге, где находится найденный файл. В этом случае мы выполняем команду pwd
, которая печатает имя каталога. Мы заключаем команду в sh -c
, чтобы убрать аргументы. (Некоторые (все? )реализации find
требуют подстановки аргумента {}
, который будет списком файлов jpeg в текущем каталоге. Мы хотим игнорировать этот список и печатать только каталог.)