検索検索基準を使用するときに親フォルダのサイズを取得しますか?

検索検索基準を使用するときに親フォルダのサイズを取得しますか?

ファイル名で特定の正規表現を探していて、独自の方法で親フォルダとそのサイズを返したいと思います。

たとえば、以下は私が動作すると予想されるコマンドです。

find -E . -type f -regex '.*[fF][oO][oO].*' -maxdepth 2 | rev | cut -d'/' -f2- | rev | egrep -v '\.$' | uniq | xargs du -sh

xargs: unterminated quoteファイル名の引用符が異なるため失敗します。

findだから私はwith-print0xargswithを使うようになりました-0

find -E . -type f -regex '.*[fF][oO][oO].*' -maxdepth 2 -print0 | rev | cut -d'/' -f2- | rev | egrep -v '\.$' | uniq | xargs -0 du -sh

しかし、最終的にエラーが発生しました。これは明らかにfind形式の出力を変更したdu: Binary file (standard input) matchesためです。uniq-print0

親フォルダの下で一致するファイルまたはフォルダを検索するときは、親フォルダのサイズを見つけることをお勧めします。繰り返します。サブフォルダのパスやファイル情報なしで最上位のフォルダ名とそのサイズ(du -sh)のみを見つけて、一致する基準に合ったきちんとしたデフォルトのフォルダのリストを作成したいと思います。

ベストアンサー1

revどちらegrepuniqゼロを食べて線を見ます。 GNUがある場合findそしてuniq次のように多くの単純化が可能です。

find ...tests... -printf '%h\0' | uniq -z | xargs -0 du -sh

GNUfind-printfオプションは、各ファイルの出力を記述する形式を取ります。%hファイル名を含まないパス形式で、\00 で終了します。uniq -z各レコードをゼロで終了するように指示します。それ以外の場合は、1行だけが表示され、本質的に前のように続行できますcatxargs

それは考えることができるsort -z -uuniq順序付けされていない名前を考慮するよりも優れています。ただし、最大深度要件は、中間の項目.だけが複数回表示されることを意味します。-mindepth 2これも避けます。

ファイル名にゼロがない場合

おすすめ記事