ローカルRedhatサーバーのソフトリンクを介して接続されたNFSにファイルログがあります。
先週末にタッチしたファイルを検索して全体のサイズを計算したところ、結果が間違っていることがわかりました。
find . -mtime +3 -a -mtime -5 -ls
これは、先週末に私が触れたファイルの名前、パス、サイズ、gid、uidなどを提供します。ギイ。
問題はソフトリンクにあります。リンクされたファイルではなく、リンクサイズ自体のみを報告します。したがって、リンクは102バイトしかできませんが、実際のファイルは24Gです。そして、総保存容量が11TBなのにファイルが23TBだと言うのでどこか二重に計算されるようです。
この問題を解決する方法はありますか?
ありがとう
答え1
-L
シンボリックリンクをたどるには、このフラグを使用します。
シンボリックリンクに従ってください。 findがファイルに関する情報を確認または印刷するときに使用する情報は、リンク自体ではなくリンクが指すファイルの属性から取得する必要があります(壊れたシンボリックリンクまたはfindが指しているファイルを確認できない場合を除く)。 )リンクポイントから)。このオプションの使用は -noleaf を意味します。後で -P オプションを使用すると、-noleaf は引き続き機能します。 -L が適用され、 find が検索中にサブディレクトリへのシンボリックリンクを検索すると、シンボリックリンクが指すサブディレクトリが検索されます。
-Lオプションが適用されると、-type述部はリンク自体ではなくシンボリックリンクが指すファイルタイプと常に一致します(シンボルリンクが壊れない限り)。 -L を使用すると、-lname および -ilname 述部は常に false を返します。
答え2
readlink -f
これにより、シンボリックリンクの宛先が提供され、その後、stat
出力を使用してreddlink
ディスク上の物理ファイルに関するデータを取得できます。また、ターゲットへのトレースシンボリックリンクを使用してfind -L
から、追加の述語| sort | uniq
仕様内でリンクされたファイルを二重計算するのを防ぐこともできますfind
。