web-dev-qa-db-ja.com

同じiノード番号を持つすべてのファイルをリストしますか?

言っておきましょう、私がするときls -liディレクトリ内で、これを取得します。

12353538 -rw-r--r-- 6 me me 1650 2013-01-10 16:33 fun.txt

出力が示すように、ファイルfun.txtには6ハードリンク。 iノード番号は12353538です。

この場合、ファイルのすべてのハードリンク、つまり同じiノード番号のファイルをどのように見つけますか?

56
its_me
find /mount/point -mount -samefile /mount/point/your/file
60
Hauke Laging

すでにiノード番号がある場合は、findの-inumオプションを使用できます。

find /mount/point -xdev -inum 12353538

(一部のfind実装では、-mount-xdevの同等物としてサポートしていますが、-xdevのみが標準です)。

55
scai

以前の回答のおかげで。

statバイナリは、inodeだけでなく、対応するデバイスのマウントポイントも提供できることに注意してください。以下のスニペットは、これを使用して「通常の」ユースケースを解決します。

fn_hardlinks() {
  declare target; target="$1" && shift
  [ ! -e "$target" ] && \
    { echo "[error] invalid target: '$target'" 1>&2; exit 1; }
  stat '/' 2>/dev/null 1>&2 || \
    { echo "[error] no functioning 'stat' binary found'" 1>&2; exit 1; }
  declare mount; mount="$(stat -c '%m' "$target")"
  declare inode; inode="$(stat -c '%i' "$target")"
  [ "x${mount[-1]}" != "x/" ] && mount+="/"
  find "$mount" -xdev -inum "$inode" 2>/dev/null
}

alias hardlinks=fn_hardlinks

そして実行中:

> hardlinks ./resources/sphinx/gitinfo.py
/home/user/build/z-documentation/resources/sphinx/gitinfo.py
/home/user/build/sphinx-gitinfo/git/sphinx-gitinfo/gitinfo.py

PS:使い方に応じて、exitreturnに注意してください。

0
elbeardmorez