wc -l を通して xargs の各バッチをパイプします。

wc -l を通して xargs の各バッチをパイプします。

だから私の使命は、最もハードリンクがあるディレクトリでファイルを見つけることです。これまで私は以下を持っています:

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回だけ実行します。

おすすめ記事