У меня есть команда
sudo find / -size +450M -exec ls -lhGSr {} \;
найти и перечислить файлы, больше, чем 450M. Я знаю, как отобразить вывод в zenity, но я хотел бы выбрать путь (любой) в выводе zenity, затем дважды щелкните, и этот путь открыт в Файловом менеджере (в моем случае в Thunar). Как я могу достигнуть этого?
Хотя возможно сделать это, необходимо иметь в виду, что это будет напрасно тратить время, смотря в каталогах такой как /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 выполняется как Ваш обычный пользователь (графические приложения не должны быть запущены как корень). Когда первые концы строки Вы представлены диалоговое окно Zenity. Так как необходимо предоставить каталог, который содержит выбранный файл как аргумент thunar
, Я извлекаю его с dirname
.
В целом Вы создаете список выбора в zenity
как в следующем примере, где файлы в текущей папке перечислены:
zenity --list --column="Files" $(ls)
Эта команда отобразит zenity диалоговое окно с выводом ls
команда. Когда объект выбран, он печатается к стандарту.
Можно объединить команды, таким образом, что меры непосредственно приняты по выводу zenity
как следующее:
xdg-open $(zenity --list --column="Files" $(ls))
Специально для XFCE можно предпочесть использовать exo-open
вместо этого xdg-open
.