別のファイルシステム上のディレクトリをどのように識別しますか?

別のファイルシステム上のディレクトリをどのように識別しますか?

私がディレクトリ(たとえば/mnt)にあると想像してください。そのうちのいくつかは他のファイルシステムのマウントポイントであり、他のディレクトリは同じファイルシステムの正当なディレクトリです。 2つのディレクトリを区別できるように、現在のディレクトリの内容を一覧表示する簡単なコマンドを実行できますか?

1つの可能性は、tree -L 1 -x同じファイルシステム内の対応するフォルダのみを拡張することです。ただし、そのフォルダがすべて空の場合(つまり、空のファイルシステムがマウントポイントにマウントされ、正当なディレクトリが空のディレクトリの場合)は機能しません。 。

(ここで実際のユースケースはbtrfsファイルシステムで、どのディレクトリがサブボリュームであり、どのディレクトリではないかを簡単に識別できます。)

編集する:友達からこれを使用してdf各ファイルのマウントポイントをインポートしたら、次のコマンドを実行して他のファイルシステムのすべてのフォルダを一覧表示できることを提案しました。

comm -1 -3 \
  <(df --output=target . | sort) \
  <(df --output=target * | sort | uniq) |
  xargs basename -a

このコマンドはマウントポイントを取得するためにすべてのファイルに対して実行され、df現在のディレクトリから出力を削除して(ヘッダーも削除され)、各ファイルのデフォルト名を取得します。dfしかし、これは特にエレガントではなく壊れやすいです(少なくとも改行のため、おそらく私が何かを見落としているからかもしれません)。もっと良い方法がありますか?

ベストアンサー1

私はこれを使用しますdf

$ cd /usr

$ ls
X11R6       include     libexec     mdec        sbin        xobj
bin         lib         local       obj         share       xsrc
games       libdata     lost+found  ports       src

$ for d in *; do test -d "$d" && df -P "$d" | awk -v d="$d" 'FNR>1{print d,$NF}'; done 
X11R6 /usr
bin /usr
games /usr
include /usr
lib /usr
libdata /usr
libexec /usr
local /usr/local
lost+found /usr
mdec /usr
obj /usr
ports /usr/ports
sbin /usr
share /usr
src /usr
xobj /usr
xsrc /usr

おすすめ記事