동일한 마운트 지점에 있지 않은 / 아래의 디렉토리 나열

동일한 마운트 지점에 있지 않은 / 아래의 디렉토리 나열

/ 아래에 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이 명령은 다음을 수행합니다 .다른준비가 되면 mount 및 모든 /루트 마운트 파일 이름을 사용할 수 있습니다 . $@따라서 당신이 할 일을 나열하십시오:

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바로 아래에 디렉터리를 나열합니다 . /두 명령의 출력은 으로 전송됩니다 awk. awk장치 번호가 루트 장치와 같지 않으면 디렉터리가 인쇄됩니다. 첫 번째 질문에 대한 답변으로 $2!=""&&실제 루트 디렉터리를 필터링하는 데 사용됩니다.

프로그램의 마지막 항목을 !=첫 번째 질문의 디렉토리 찾기 부분으로 변경합니다.==awk

관련 정보