言っておきましょう、私がするときls -li
ディレクトリ内で、これを取得します。
12353538 -rw-r--r-- 6 me me 1650 2013-01-10 16:33 fun.txt
出力が示すように、ファイルfun.txtには6ハードリンク。 iノード番号は12353538です。
この場合、ファイルのすべてのハードリンク、つまり同じiノード番号のファイルをどのように見つけますか?
find /mount/point -mount -samefile /mount/point/your/file
すでにiノード番号がある場合は、findの-inum
オプションを使用できます。
find /mount/point -xdev -inum 12353538
(一部のfind
実装では、-mount
を-xdev
の同等物としてサポートしていますが、-xdev
のみが標準です)。
以前の回答のおかげで。
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:使い方に応じて、exit
とreturn
に注意してください。