s1、s2、…で終わるパーティションではなく、すべての/ dev / disksをリストする方法は?


0

コマンドラインでBash 3.2シェルのシリアル番号からドライブのMac OS X名をリスト(出力)しようとしています。そのためには、パーティションではないすべてのブロックデバイスをループする必要があります。だから私はこのbashループのより良い交換が必要です:for disk in /dev/disk*; do …; done

最終的にはワイルドカードパターンで、パイピング(スルー)や他のユーティリティ(など)なしでls のみ使用したいと思います。grepfind

これはls /dev/disk*s1(のような/dev/disk0s1s2などで終わるパーティションと似ていますが、一致しません。

回帰

失敗した試行:

$ ls /dev/disk[0-9]*[!s][!1-9]
$ ls /dev/disk[0-9]*[!s,!1-9]
$ ls /dev/disk* -d -- *[!s][1-9]
$ ls /dev/disk[0-9]*[!s,1-9]
$ ls /dev/disk[0-9]*[!s]
$ ls /dev/disk[0-9]*[!s][0-9]
$ ls /dev/disk[0-9]*[!s]*
$ ls /dev/disk[0-9]*[!\s1-9]
$ ls /dev/disk[0-9]*[!s1-9]
$ ls /dev/disk[0-9]*([!s1-9])
$ ls /dev/disk[0-9]*[!s]*[0-9]
$ ls /dev/disk[0-9][0-9]
$ ls /dev/disk* --ignore="disk*s?"
$ ls /dev/disk* -I "*s?"
$ ls /dev/disk* -I "*s[1-9]"
$ ls /dev/disk*[!s?]

回答:


1

kshの拡張グロブを使用する:

ls /dev/+(disk?|disk??)

bash拡張グロブをオンにする必要があるため

shopt -s extglob
ls /dev/+(disk?|disk??)

外観、拡張グロビングをオンにしないでください。-bash: syntax error near unexpected token '('
プロバックアップ

@Pro Backup-ああ、拡張グロブセットがない場合、そのエラーが発生します。シェルの機能を制限する理由を説明してください。
fd0

他のbash / shellスクリプトの実行を破壊する可能性があるため、シェルオプションを変更することはありません。
プロバックアップ

@Pro Backup-まあ、あなたの答えのextended glob設定null globが何も「壊さない」ように、設定はあなたのbashスクリプトを「壊さない」。幸運を。
fd0

0
$ ls /dev/disk[0-9]{,[0-9]}
/dev/disk0  /dev/disk11 /dev/disk2  /dev/disk4  /dev/disk6  /dev/disk8
/dev/disk10 /dev/disk12 /dev/disk3  /dev/disk5  /dev/disk7  /dev/disk9
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.