Как рекурсивно проверить, есть ли у конкретного пользователя доступ для чтения к папке и ее содержимому?

Если вы можете установить файл с помощью

gsettings set org.gnome.desktop.background picture-uri file:///path/to/the/file

, вы можете получить файл с помощью

gsettings get org.gnome.desktop.background picture-uri

. Это даст вам строку типа ' file: ///usr/share/images/desktop-base/desktop-background.xml ', что неплохо, но необходимо проанализировать, прежде чем мы сможем напрямую использовать его в качестве аргумента для другой команды оболочки. Таким образом, мы можем легко вырезать кавычки и часть file: // с помощью cut , например:

gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1

(Примечание: возвращаемый файл на самом деле является файлом XML для меня, но Я не использую GNOME, поэтому не знаю, как это работает в реальной системе. Здесь может быть еще один этап обработки, который должен произойти здесь, прежде чем вы сможете начать сравнение файлов.)

И поскольку вы уже знаете, имя файла, с которым вы хотите сравнить, вы можете использовать cmp для сравнения этих двух файлов:

cmp my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)"

cmp установит возвращаемое значение 0 (истина), если файлы одинаковые, или ненулевое значение (false), если они разные или что-то пошло не так. Мы можем использовать это, чтобы решить, что делать дальше, возможно, используя оператор || , который запустит команду, только если предыдущая команда вернула ненулевое значение (false). Мы также можем подавить вывод из cmp с помощью переключателя -s . Это дает нам команду, которую вы могли бы, например, запустить как обычное задание cron:

cmp -s my/file.jpg "$(gsettings get org.gnome.desktop.background picture-uri | cut -d/ -f3- | cut -d\' -f1)" || gsettings set org.gnome.desktop.background picture-uri file:///full/path/to/my/file.jpg
5
29.07.2015, 14:09
0 ответов

Теги

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