/proc/mounts
特定のプレフィックスまたはデフォルトのディレクトリで始まるすべてのインストールを表示して返したいと思います。/run/media
。現時点では1つのプレフィックスで十分ですが、原則として複数のプレフィックスを指定できる方が良いでしょう。
grep -o /run/media /proc/mounts
/run/media
現在の数だけが返されます。正規表現部分が次の場合/run/media[\S]*
(フルパスを空白まで一致させてください)、まだ以前と同じ結果を返します。
最終的には、次のようにテキストプレフィックスと引用符でフォーマットされたすべての一致を出力したいと思います。
"fs:/run/media/user/device1" "fs:/run/media/user/device2"
など
ベストアンサー1
foo () {
awk '{ print $2 }' /proc/mounts |
while read -r mountpoint; do
for pattern do
if [[ $mountpoint == $pattern ]]; then
printf '%s:\t%s\n' "$pattern" "$mountpoint"
break
fi
done
done
}
このbash
関数は2番目の列(マウントポイント)を解析し、/proc/mounts
与えられた各引数をシェルパターンで各マウントポイントと比較します。各マッチングについて、パターンマッチングとマウントポイントが印刷され、次のマウントポイントが考慮されます。出力形式はコマンドを変更することで簡単に変更できますprintf
。
アクセス権を持つUbuntuシステムで実行される例(これらのパターンはファイル名のグロービングパターンであり、ワイルドカード文字を含むパターンは引用によってシェルから保護する必要があります)。
$ foo /sys '/sys/*' '*info*'
/sys: /sys
/sys/*: /sys/firmware/efi/efivars
/sys/*: /sys/fs/fuse/connections
/sys/*: /sys/fs/pstore
/sys/*: /sys/kernel/debug
/sys/*: /sys/kernel/debug/tracing
/sys/*: /sys/kernel/security
*info*: /proc/cpuinfo
*info*: /proc/meminfo
/sys/*: /sys/fs/cgroup
/sys/*: /sys/fs/cgroup/systemd
/sys/*: /sys/fs/cgroup/perf_event
/sys/*: /sys/fs/cgroup/cpu,cpuacct
/sys/*: /sys/fs/cgroup/hugetlb
/sys/*: /sys/fs/cgroup/freezer
/sys/*: /sys/fs/cgroup/blkio
/sys/*: /sys/fs/cgroup/cpuset
/sys/*: /sys/fs/cgroup/pids
/sys/*: /sys/fs/cgroup/net_cls,net_prio
/sys/*: /sys/fs/cgroup/memory
/sys/*: /sys/fs/cgroup/devices
awk
私はプログラム自体内でマッチングを実行するのではなくawk
(通常実行する)プログラムの出力を読み取るために関数内でシェルループを使用することにしました。パターンを繰り返して==
これをbash
。
ただし、拡張正規表現を使用するには、==
関数のをに変更します=~
。ただし、式を一致するように^
固定する必要があることを覚えておいてください。$
特定パス(のように^/sys$
)、そうでない場合、式はパス名のどこにでも一致します。