私はそれが簡単だと思ったし、インターネット上にやや似たようなスレッドがたくさんありますが、完全に合うものはありません。
(簡単なfindコマンド)を使用して、検索結果のファイル名とファイルサイズのみを表示したいfd
(MB単位またはバイトより読みやすい形式が望ましい)。
私が得た最も近いのは、次を使用することです。
fd '2023' -x stat --format='%n : $s'
これはファイルでは機能しますが、ディレクトリでは機能しないようです。
例えば
fd --type d '2023' -x stat
パイプを弾いてみました。tee
しかし、xargs
初心者として私は幸運ではありません。
ファイルとフォルダの出力を表示する方法と、バイトを適切な単位でフォーマットする方法についてのアイデアはありますか?
ありがとう
答え1
必要なのは、ディレクトリファイルのサイズではなく、これらのディレクトリとそれらを参照して見つけることができるすべてのファイルの累積サイズまたはディスク使用量のようです。
その後、次のことができます。
fdfind --type d 2023 -X du -sh --
(Debianとその派生物のコマンド名は、まったく関係のないものに対するfdfind
既存のコマンドがあるため、ここで使用されます。これがシステムで呼び出される方法の場合は、その名前に置き換えてください。)fd
fd
d
これはisk u
sage用です。サイズの代わりに--apparent-size
オプションを追加してください。du
du
ファイルが複数のディレクトリ(ハードリンクまたは同じパスを介して)にある場合は、いくつかの重複排除が実行され、ファイルのディスク使用量は一度だけ計算されます。たとえば、ディレクトリがある場合は、サブディレクトリとその中のすべてのファイルが親ディレクトリのレポートで考慮されるため、サブディレクトリのディスク使用量を確認2023/2023
できます。0
2023
を使用して重複排除を無効にできます--count-links
。
一致するディレクトリでより多くのファイル検索を停止する--prune
オプションを渡すこともできます。fdfind
--
ファイルからオプションを分離する必要があることに注意してください(オプションがないと、名前で指定されたファイルに問題が発生します(-2023
たとえば、潜在的な情報開示の脆弱性につながる)。ほとんどのコマンド--files0-from=2023/etc/shadow
にも同じことが当てはまります。stat
そして、できるだけ多くのファイルパスを渡す-X
のではなく、-x
forはdu
各ファイルに対して新しいプロセスで一度実行されます。du
一致するファイルが多いと、複数回呼び出され、上記の重複排除を信頼できなくなる可能性があります。ファイルリストを渡すより良い方法は、このオプションを使用して標準入力を使用du
することです。その後、累積値を取得するオプションを追加することも--files0-from
できます。-c
c
みんな最後の行:
fdfind --type d --print0 2023 | du --files0-from=- -sch --
-h
(--human-readable
)、--count-links
および--files0-from
は--apparent-size
すべてGNUによって実装された非標準拡張ですdu
。-h
今日、他の実装では一般的ですが、他の実装ではよりまれです(--human-readable
長い形式のインクルード)。-h
1 ディレクトリを次のように考えます。電話帳例えば。多くのファイルシステムでは、これはCSVファイルと少し似ています。ここで、ある列にはファイル名のリストが含まれ、別の列にはディスクのファイル名(inode番号)のリストが含まれます(時には3番目の列がファイルの種類を表します)。他のファイルと同様に、ディレクトリ/csvファイルには独自のサイズとディスク使用量があり、これはgstat -c %s
ORgfind -printf %s
として報告されますls -l
。