ls
только отображает его вывод в столбцах, когда он печатает к терминалу. Когда его вывод является файлом или каналом, ls
печать один объект на строку.
Можно использовать опцию -C
для печати в столбцах независимо от типа потока вывода но это лишит возможности (или по крайней мере, трудно) фильтровать вывод с grep
.
Можно сказать ls
проигнорировать файлы, имя которых начинается с цифры. Это - самый простой способ быть произведенным, который похож на вывод от ls /proc
только без рабочих каталогов.
ls -I '[0-9]*'
С другой стороны, можно указать, какие записи Вы хотите перечислить.
(cd /proc && ls -d [!0-9]*)
Если Вы просто хотите записи и не заботитесь о презентации или цветах, используйте подстановочные знаки оболочки вместо ls
. Вторая команда характерна для zsh.
(cd /proc && echo [!0-9]*)
echo /proc/[^0-9]*(:t)
C:\> dir /B | findstr /R /C:"[mp]"
Пример[12148]С вышеуказанной информацией ваш сценарий мог просто посмотреть на эти записи, используя нечто вроде [114795]readlink[114796]:[12149]А затем, используя команду [114797]mount[114798], пройти назад, чтобы узнать, в какой каталог устройство было автоматически подключено: [12150]Эта информация может быть расширена до одного liner подобно этому:[12151]Получение идентификатора устройства[12152]Вы можете разобрать эту информацию на выходе из [114799]/dev/disk/by-id/usb*[114800], подобно этому:[12153]Кстати, эта информация представляет собой конкатенцию описания производителя USB + продукта. [12154]Вы также можете получить доступ к ней, как только вы установили, какое устройство ([114801]/dev/sd*[114802]) использует USB устройство, через UDEV:[12155] Вот подход, который я использую. Это происходит из:
https://unix.stackexchange.com/a/119782/15010
https://unix.stackexchange.com/a/60335/15010
export USBKEYS=($(
for blk in $(lsblk -ndo name) ; do {
udevadm info --query=all --name "/dev/$blk" |\
grep -q ID_BUS=usb &&
printf 'findmnt %s -no TARGET ;'\
"/dev/$blk" /dev/"$blk"[0-9]
} ; done 2>&- |. /dev/stdin
))
echo "$USBKEYS"
export STICK
case ${#USBKEYS[@]} in
0 ) echo "No USB stick found."; exit 0 ;;
1 ) STICK=$USBKEYS; echo "STICK=$USBKEYS" ;;
* ) NOTE: the code for this case is not included in the interest of brevity.
esac
Это также работает для меня. В основном это из https://unix.stackexchange.com/a/119260/15010
#!/bin/bash
while read mtabline
do
device=`echo $mtabline | awk '{print $1}'`
udevline=`udevadm info -q path -n $device 2>&1 |grep usb`
if [ $? == 0 ] ; then
echo "$device"
fi
done < /etc/mtab