Localizar arquivos sem um número

4

Estou tentando escrever um script simples que itera todas as unidades, exceto sda. Agora eu tenho isso

for i in $(find /dev/ -name "sd*" ! -name "sda*")
do
        echo $i
done

No entanto, isso inclui partições como /dev/sdb1 , enquanto eu quero apenas a unidade raiz como /dev/sdb .

Como modifico a instrução find para garantir que não recebo nenhum dos arquivos numerados?

    
por Phil 20.09.2011 / 17:05

4 respostas

4

Não use a sub-regra de comando dessa maneira, você acabará com problemas quando a divisão de palavras for aplicada. Apenas faça

find /dev/ -regex '/dev/sd[a-z]+' ! -name 'sda'

Se o seu verdadeiro objetivo é mostrar dispositivos de bloco de base, basta olhar em /sys/block .

    
por 20.09.2011 / 17:14
3

Supondo que você tenha uma única letra após sd , não é necessário usar find .
Em bash você pode fazer

shopt -s nullglob
for dev in /dev/sd[!a]; do
    echo "$dev"
done

A primeira linha é não ter saída quando não houver correspondência.

Editar

Para se estender a um número indeterminado de letras, o glob poderia ser

printf '%s\n' /dev/!(sda|*[0-9])

onde !(pattern) significa tudo menos padrão , e os padrões excluídos são, no caso específico sda e *[0-9] (tudo terminando em um número).

As globs estendidas devem ser ativadas para que isso funcione (por exemplo, shopt -s extglob ).

    
por 20.09.2011 / 17:25
1

Se você deseja obter uma lista de dispositivos de disco no linux, sugiro:

paste -s /sys/dev/block/*/uevent | sed -n '/DEVTYPE=disk/s|.*DEVNAME=\(.*\)\t.*|/dev/|p'

Isto lhe dará também uma lista de discos em potencial como / dev / loop3 ou / dev / ram12.

Se você quiser uma lista de discos "partiáveis" reais, você pode perguntar ao fdisk:

LANG="C" fdisk -l | sed -n 's|^Disk \(/.*/.*\):.*||p'

Então você pode filtrar o sda:

LANG="C" fdisk -l | sed -n 's|^Disk \(/.*/.*\):.*||p' | grep -v sda
    
por 21.09.2011 / 00:47
1

assumindo que você tem certeza que está lidando com sd * 's e não com hd *' s

find /dev/ -name "sd[b-z]"

deve fazer o truque.

    
por 21.09.2011 / 10:25