숫자가 없는 파일 찾기

숫자가 없는 파일 찾기

나는 sda를 제외한 모든 드라이브를 반복하는 간단한 스크립트를 작성하려고 합니다. 이제 나한테는 이게 있어

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

그러나 여기에는 이와 같은 파티션이 포함되는 /dev/sdb1반면, 저는 이와 같은 루트 드라이브만 원합니다 /dev/sdb.

번호가 매겨진 파일을 얻지 못하도록 find 문을 어떻게 수정합니까?

답변1

이런 식으로 명령 대체를 사용하지 마십시오. 단어 분리를 적용할 때 문제가 발생하게 됩니다. 그냥 해

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

실제 목표가 기본 블록 장치를 표시하는 것이라면 를 살펴보십시오 /sys/block.

답변2

그 뒤에 문자가 있다고 가정하면 sd문자를 사용할 필요가 없습니다 find. 당신이 할 수 있는 일
bash

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

일치하는 항목이 없으면 첫 번째 줄은 출력되지 않습니다.

편집하다

불확실한 수의 문자로 확장하려면 glob을 사용할 수 있습니다.

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

!(pattern)패턴빼고 다, 특정 경우에 제외되는 패턴은 sda*[0-9](모두 숫자로 끝남)입니다.

작동하려면 확장된 전역 변수를 켜야 합니다(예: shopt -s extglob).

답변3

Linux에서 디스크 장치 목록을 얻으려면 다음을 권장합니다.

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

그러면 /dev/loop3 또는 /dev/ram12와 같은 잠재적인 디스크 목록도 제공됩니다.

"파티션 가능한" 디스크의 실제 목록을 원할 경우 fdisk에 문의할 수 있습니다.

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

그런 다음 sda를 필터링할 수 있습니다.

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

답변4

HD*가 아닌 sd*를 다루고 있다고 확신한다고 가정합니다.

/dev/ -name "sd[bz]" 찾기

그러면 문제가 해결될 것입니다.

관련 정보