列出 / 下不在同一挂载点的目录

列出 / 下不在同一挂载点的目录

如果我在 / 下有 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 下创建的其他 3 个目录(/boot、/dev、/devices..)

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吐出根设备的十进制设备号。然后该find命令列出 直接位于 下的目录/以及十进制设备号。这两个命令的输出都发送到awk.awk如果设备号不等于根设备,则打印出目录。在回答第一个问题时,它$2!=""&&是用来过滤掉实际的根目录的。

将程序中!=的最后一个更改为第一个问题的查找目录部分。==awk

相关内容