0

システムに追加されたばかりのドライブの名前を取得するために、ドライブを追加する前後にcat / proc/partitionsによって作成された2つのファイルの違いを確認しています。パーティション番号の数字のサフィックスが付いていないドライブの名前を探しています。

cat /proc/partitions > /mnt/HD_a2/tempFiles/file1
... add some additional drives to the system
cat /proc/partitions > /mnt/HD_a2/tempFiles/file2

diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 

diffコマンドを実行すると、次のように返されます。

16a17,18
>    8    32    7816704 sdc
>    8    33    7816688 sdc1

接頭辞'>'が付いている行の5番目の列から値を取得するためにawkが追加された場合

 diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 |  awk '">" { print $5 }'

戻り値は次のとおりです。

-- blank line is returned here--
sdc
sdc1

'sdc'のみを返す試みで、grepコマンドが追加されました。

diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 |  awk '">" { print $5 }' | grep ^[A-Za-z]+$

しかし、コマンドラインを実行すると、出力がまったく得られません。

grepコマンドがに置き換えられた場合

 grep ^[A-Za-z]*$

戻り値はsdc1を除外しますが、sdcの前に空白行を返します

誰かが私の構文のエラーを説明したり、最近追加された新しいドライブの名前を取得するためのより良い方法を提供したりできます。

4

2 に答える 2

1
diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 \
|  awk  '">" && NF>2 && $5 !~ /[0-9]$/{ print $5 }'

出力

sdc

NFはフィールドの数を意味します。これを、4などのより大きな数に変更することをお勧めします。これを使用して、空の行、または十分な価値のあるデータがない行をスキップできます。

$5 !~ /[0-9]$/、数字で終わる行を無視します。

sは、&&フィールドを印刷する前に、これらの条件がすべて真でなければならないことを意味します$5

IHTH

于 2013-01-13T19:59:27.887 に答える
1

おそらく、awkスクリプトの最初では/^>/なく、必要でした。">"また、grep '^[[:alpha:]]\+$'空の行をスキップしてみてください。

ただし、これがデバイス検出の信頼できる部分であると思われる場合は、udevスクリプトについてお読みください。「デバイス接続のブロック」などのイベントにフックして、カスタムスクリプトを実行するのはかなり簡単です。おそらく、パーティションファイルを解析するよりもハックが少ないでしょう。

于 2013-01-13T20:00:28.913 に答える