Мне нужна помощь с zenity, чтобы вывести список файлов

У меня есть команда

sudo find / -size +450M -exec ls -lhGSr {} \;

для поиска и вывода списка файлов размером более 450 МБ. Я знаю, как отображать вывод в zenity, но я хотел бы выбрать путь (любой) в выводе zenity, затем дважды щелкнуть, и этот путь открывается в диспетчере файлов (в моем случае в Thunar). Как я могу этого добиться?

2 ответа

Решение

Хотя это возможно, вы должны иметь в виду, что это будет тратить время на поиск в таких каталогах, как /sys, /proc и /dev, который вам, вероятно, следует оставить в покое.

Тем не менее, этот небольшой скрипт делает то, о чем вы просили:

selectedFile=$(sudo find / -size +450M -exec sudo -u "$USER" zenity --list --column "Found files" {} +)
if [ -n "$selectedFile" ]; then
    selectedFileDir=$(dirname "$selectedFile")
    thunar "$selectedFileDir"
fi

findвыполняется с привилегиями, но Zenity запускается от имени обычного пользователя (графические приложения не должны запускаться от имени пользователя root). Когда первая строка закончится, вам будет представлен диалог Zenity. Поскольку вам необходимо указать каталог, содержащий выбранный файл, в качестве аргумента для thunar, Я извлекаю его с помощью dirname.

Как правило, вы создаете список выбора в zenity как в следующем примере, где перечислены файлы в текущей папке:

zenity --list --column="Files" $(ls)

Эта команда отобразит диалоговое окно zenity с выводом lsкоманда. Когда элемент выбран, он распечатывается до стандартного размера.

Вы можете комбинировать команды так, чтобы действие выполнялось непосредственно на выходе zenity следующим образом:

xdg-open $(zenity --list --column="Files" $(ls))

Специально для XFCE вы можете предпочесть использовать exo-open вместо xdg-open.

Другие вопросы по тегам