Мне нужна помощь с 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.