だから私の使命は、最もハードリンクがあるディレクトリでファイルを見つけることです。これまで私は以下を持っています:
find . -name "file*" | xargs -I{} -n 1 find . -samefile {}
これは私に次のことを与えます:
./hardlinkFIle245
./hardlinkFIle23
./hardlinkFIle2
./file2.txt
./hardlinkFIle1234
./hardlinkFIle123
./hardlinkFIle12
./hardlinkFIle1
./file1.txt
これでパイプで接続すると、|wc -l
行の総数は9になります。
find . -name "file*" | xargs -I{} -n 1 find . -samefile {} | wc -l
私が望むのは、xargsバッチ-n 1ごとに数を提供することです。だから私は以下が欲しい。
4
5
ベストアンサー1
GNUを使用している場合は、find
リンク数を報告することができます-printf %n
。したがって、以下を使用して最大値を取得できます。
find . -name 'file*' -printf '%n\n' | sort -rn | head -n1
.
ただし、数値には、パターンと一致しない項目の下にないリンクを含めることができますfile*
。
file*
以下に見つかった名前付きハードリンクの数を数え、そのパスを表示するには、.
次の手順を実行します。
find . -name 'file*' -printf '%i\0%p\0' | gawk -v RS='\0' '
{
inode = $0
getline file
}
++count[inode] >= max {
files[inode] = files[inode] " - " file ORS
max = count[inode]
max_inode = inode
}
END {
printf "%s", "File with most links ("max"):\n" files[max_inode]
}'
find
ファイルごとに1回ではなく呼び出しを1回だけ実行します。