В zsh
для сокращения списка файлов до существующих можно использовать квалификатор (N)
glob, добавляемый к каждому элементу списка:
files=(/opt/foo/lib.jar /opt/bar/lib.jar)
that_exist=($^files(N))
(($#that_exist > 0 )) && print -rl -- $that_exist
Обратите внимание, что, в отличие от ls
, он может сказать, существует ли файл или нет, даже если у вас нет поиска доступа к его родительскому каталогу (до тех пор, пока у вас есть доступ для чтения ), так как он ищет соответствующие записи в каталоге, не пытаясь получить доступ к файлу.
См. также:
that_exist_after_symlink_resolution=($^files(N-^@))
Который выбирает файлы, которые не являются(^
)символической ссылкой(@
)после разрешения символической ссылки(-
). Эквивалентно использованию ls -Ld
.
Я не знаю, лучшее ли это решение и будет ли оно работать во всех дистрибутивах Linux, но я могу найти нужную мне информацию \_SB_.PCI0.GFX0
с помощью этой команды:
# cat /sys/class/pci_bus/0000:00/device/0000:00:02.0/firmware_node/path
Это также известно как путь ACPI. Почему эта команда работает для меня?
Пояснение
В Linux устройство PCI идентифицируется 16 -битным номером домена, 8 -битным номером шины, 5 -битным номером устройства и 3 -битным номером функции; последние три числа обычно обозначаются как BDF устройства или B/D/F (для шины/устройства/функции ).
Команда lspci
может отображать этот идентификационный номер, используя...
# lspci -D
..
0000:00:02.0 VGA compatible controller: VMware SVGA II Adapter
..
Формат этого номера 0000:00:02.0
— domain:bus:device:function
.
Теперь используйте эту команду из терминала, чтобы найти путь ACPI вашего видеоадаптера
# cat /sys/class/pci_bus/<domain:bus>/device/<domain:bus:device:function>/firmware_node/path
Опять же, я мало знаю об этой теме или о том, будет ли эта процедура работать на всех дистрибутивах, но она работает на моем Ubuntu mate 20.04.1
.
Другой хакерский метод может состоять в том, чтобы выполнить шаги, описанные в моем первоначальном вопросе, с acpidump
, acpixtract
и iasl
. Затем просто найдите в полученном дизассемблированном файле.dsl DeviceObj
. Таким образом, нахождение строки:External(SB .PCI0.GFX0, DeviceObj)будет означать, что путь ACPI\_SB_.PCI0.GFX0