同じマウントポイントにない/下のディレクトリのリスト

同じマウントポイントにない/下のディレクトリのリスト

/下に8つのディレクトリがあり、そのうち5つが別のマウントポイントにある場合/

/dev/md/dsk/d0          49G    32G    17G    66%    /
/dev/md/dsk/d65         76G    77M    75G     1%    /u03
/dev/md/dsk/d64        345G    76G   266G    23%    /u02
/dev/md/dsk/d5          76G    77M    75G     1%    /u01
/dev/dsk/emcpower0g    591G   288G   297G    50%    /db
/dev/dsk/emcpower1g    591G   116G   469G    20%    /db2

ls -lを実行してください。

bash-3.2# pwd
/
bash-3.2# ls -l

drwxr-xr-x   3 root     sys          512 Jun 24  2014 boot
**drwxr-xr-x   5 root     root         512 Sep 16  2014 db
drwxr-xr-x   6 root     root         512 Sep 16  2014 db2
drwxr-xr-x  19 root     sys         5120 Jul 11 22:57 dev
drwxr-xr-x   2 root     sys          512 Jul 11 16:17 devices
drwxr-xr-x   3 root     root         512 Jun 25  2014 u01
drwxr-xr-x   4 root     root         512 Jul 11 17:08 u02
drwxr-xr-x   3 root     root         512 Sep  3  2014 u03

表示をフィルタリング/リスト表示する方法

a) ファイルと /mountpoint(/boot, /dev, /devices..) の下に作成された他の 3 つのディレクトリのみ

b)/下に5つのディレクトリがありますが、他の場所にマウントされています(例:/db、/db2、/u01..)

答え1

Linuxシステムでは、次のものを使用できますfindmnt

set ''
for r in /*
do  findmnt "$r"   || 
  ! set '' "$r$@"  &&
    ls "$r"
done

lsこのコマンドは次のことを行います。その他準備ができたら、マウントとすべての/ルートマウントファイル名を使用できます。$@したがって、あなたがすることをリストしてください:

ls "$@"

答え2

質問bの場合(マウントディレクトリはルートディレクトリとは異なります):

{
  stat --printf='%d\n' /
  find / -mount -maxdepth 1 -type d -printf '%D%p\n'
} | awk -F/ 'NR==1{root=$1}; $2!=""&&$1!=root{print "/"$2}'

statルートデバイスの10進デバイス番号を発行します。その後、コマンドは10進数のデバイス番号と一緒findに直下にディレクトリを一覧表示します。/両方のコマンドの出力はに送信されますawkawkデバイス番号がルートデバイスと同じでない場合は、ディレクトリが印刷されます。最初の質問に対する答えとして、実際$2!=""&&のルートディレクトリをフィルタリングするために使用されます。

プログラムの最後の項目を!=最初の質問のディレクトリ検索部分に変更します。==awk

関連情報