2017-09-18 3 views
0

プラグインされたUSBドライブを自動的に検出する必要があります。マウントされていないUSBドライブを、指定されたデバイス名デフォルトではWindowsマシンで発生します)、すべてのデバイスのマウントポイントのルートを取得します。デバイスは/ media/piのフォルダにマウントする必要があります(piは自分のユーザー名です)。正規表現を使用してgrep出力からフルパスを抽出する方法

をすべてマウンタデバイスのパスを取得するには:これは私がやっているものです

1)を実行しlsblk、出力:

NAME  MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sda   8:0 1 14.4G 0 disk 
└─sda1  8:1 1 14.4G 0 part /media/pi/D0B46928B4691270 
sdb   8:16 1 14.3G 0 disk 
└─sdb1  8:17 1 14.3G 0 part /media/pi/MI PENDRIVE 
mmcblk0  179:0 0 14.9G 0 disk 
├─mmcblk0p1 179:1 0 41.8M 0 part /boot 
└─mmcblk0p2 179:2 0 14.8G 0 part/

2)私はフィルタリングすることができ、特に細工ラインと

私はlsblk | grep 'sd' | grep 'media'を実行して出力します:

└─sda1  8:1 1 14.4G 0 part /media/pi/D0B46928B4691270 
└─sdb1  8:17 1 14.3G 0 part /media/pi/MI PENDRIVE 
をいくつかの不要な情報アウト

/media/pi/D0B46928B4691270/media/pi/MI PENDRIVEを取得する必要があります。現在、私はこれをやっています:

しかし、スペースがないパスでのみ動作し、grepの出力はもちろん配列ではありません。正規表現でこれを行うにはどうすればよいでしょうか?

ありがとうございました。

答えて

0

このようなことはありますか?

$ echo "$f" 
NAME  MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sda   8:0 1 14.4G 0 disk 
└─sda1  8:1 1 14.4G 0 part /media/pi/D0B46928B4691270 
sdb   8:16 1 14.3G 0 disk 
└─sdb1  8:17 1 14.3G 0 part /media/pi/MI PENDRIVE 
mmcblk0  179:0 0 14.9G 0 disk 
├─mmcblk0p1 179:1 0 41.8M 0 part /boot 
└─mmcblk0p2 179:2 0 14.8G 0 part/

$ grep -o '/media/.*$' <<<"$f" 
/media/pi/D0B46928B4691270 
/media/pi/MI PENDRIVE 

$ IFS=$'\n' drives=($(grep -o '/media/.*$' <<<"$f")) 

$ printf '%s\n' "${drives[@]}" 
/media/pi/D0B46928B4691270 
/media/pi/MI PENDRIVE 
+0

まず最初に、echo "$ f"は何をしますか?私はあなたの端末でそれがlsblkと同じことをしているのを見ていますが、私はそれがどうして起こったのか分かりません。 2番目に、lsblk | grep -o '/media/.*$' <<< "$ f"となり、何も出力されませんでした。しかし、私はあなたが必要とする結果を得ることを見ています。それぞれのパスは別の行にあり、他のものとは隔離されています。あなたはそれをどのようにスクリプトに入れますか? ありがとう! – user3290570

+0

彼はテキストを変数に入れ、grepコマンドでそれを使用しました。なぜ '<<<'を使うのかわからないのですか '<'がなぜ動いていないのですか – Mohamed

+0

@ user3290570私のシステムでは、 'lsblk'は完全に異なる出力を生成しますので、lsblkの出力を変数' f'あなたのシステムに似た結果でテストを行うことができます。あなたの場合、 'lsblk | grep -o '/ media /.*$' 'を実行するか、結果を配列に入れるには' IFS = $ '\ n' drives =($(lsblk | grep -o '/ media /。* $ ')) ' –

1

lsblkは、-Jフラグでjson出力をサポートします。出力を解析する場合は、次のようにお勧めします。

lsblk -J | jq '..|.?|select(.name|startswith("sd")).mountpoint // empty' 
+0

興味深い。 SuSE Leap 42.2のチェックボックスをチェックし、 '-J'オプションはチェックしませんでしたが、Archにはそこにあります。知っておいてよかった。 –

+0

RPi出力の端末でその行を実行すると、「jq:コマンドが見つかりません」 – user3290570

+0

@ user3290570だけインストールします。 'apt-get install jq' – hek2mgl

関連する問題