135

次のようにfindコマンドを発行すると:

find . -name *.ear

次のように出力されます。

./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear

名前とサイズをコマンドラインに「出力」したい:

./dir1/dir2/earFile1.ear  5000 KB
./dir1/dir2/earFile2.ear  5400 KB
./dir1/dir3/earFile1.ear  5400 KB
4

17 に答える 17

149
find . -name '*.ear' -exec ls -lh {} \;

jer.drab.orgの返信からのhエクストラ。精神的にMBに変換する時間を節約します;)

于 2008-09-15T16:59:16.973 に答える
133

-execまたは-printfを使用する必要があります。Printfは次のように機能します。

find . -name *.ear -printf "%p %k KB\n"

-execはより強力で、任意のコマンドを実行できます-したがって、「ls」または「wc」のバージョンを使用して、ファイル名を他の情報と一緒に出力できます。'man find'は、printfで使用可能な引数を表示します。これは、ファイルサイズだけではありません。

[編集]-printfは公式のPOSIX標準に含まれていないため、ご使用のバージョンでサポートされているかどうかを確認してください。ただし、最近のほとんどのシステムはGNU findまたは同様に拡張されたバージョンを使用するため、実装される可能性が高くなります。

于 2008-09-15T16:58:42.453 に答える
36

簡単な解決策は、 findで-lsオプションを使用することです。

find . -name \*.ear -ls

これにより、各エントリが通常の「ls-l」形式で提供されます。または、探していると思われる特定の出力を取得するには、次のようにします。

find . -name \*.ear -printf "%p\t%k KB\n"

これにより、ファイル名の後にKB単位のサイズが表示されます。

于 2008-09-15T16:57:30.223 に答える
28

GNU find を使用すると、これがあなたの望むものだと思います。ディレクトリではなくすべての実際のファイルを検出し ( -type f )、ファイル名 (%p)、タブ (\t)、キロバイト単位のサイズ (%k)、サフィックス "KB" をそれぞれ出力します。改行 (\n)。

find . -type f -printf '%p\t%k KB\n'

printfコマンドが希望どおりにフォーマットしない場合は、execを使用し、その後に各ファイルで実行するコマンドを続けます。ファイル名に {} を使用し、セミコロン (;) でコマンドを終了します。ほとんどのシェルでは、これら 3 つの文字すべてをバックスラッシュでエスケープする必要があります。

これは、「ls -lh」を使用してそれらを見つけて出力する簡単なソリューションです。これにより、サイズが人間が読める形式で表示されます(キロバイトはk 、メガバイトはM)。

find . -type f -exec ls -lh \{\} \;

さらに別の方法として、「wc -c」はファイル内の文字数 (バイト) を出力します。

find . -type f -exec wc -c \{\} \;
于 2008-09-15T17:08:26.843 に答える
10
find . -name '*.ear' -exec du -h {} \;

これにより、すべての不要なものではなく、ファイルサイズのみが得られます。

于 2014-01-13T21:28:25.137 に答える
4

awk は、質問者が求めたものだけを出力するように修正できます。私の Solaris 10 システムでは、find -ls は 2 番目のフィールドとしてサイズを KB 単位で出力するので、次のようになります。

% find . -name '*.ear' -ls | awk '{print $2, $11}'
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir2/earFile3.ear
5400 ./dir1/dir2/earFile1.ear

それ以外の場合は、-exec ls -lh を使用して、出力からサイズ フィールドを選択します。再び Solaris 10 で:

% find . -name '*.ear' -exec ls -lh {} \; | awk '{print $5, $9}'
5.3M ./dir1/dir2/earFile2.ear
5.3M ./dir1/dir2/earFile3.ear
5.3M ./dir1/dir2/earFile1.ear
于 2008-10-28T21:14:23.637 に答える
4

du -aを使用しないのはなぜですか? 例えば

find . -name "*.ear" -exec du -a {} \;

Mac で動作

于 2013-01-06T17:34:21.117 に答える
3

find コマンドがサポートしていない Mac OS X でこれに苦労しました-printf

「スタッフ」であるすべてのファイルの「グループ」に確かに依存している、私が見つけた解決策は...

ls -l -R | sed 's/\(.*\)staff *\([0-9]*\)..............\(.*\)/\2 \3/'

これにより、ls long の出力が 3 つのトークンに分割されます

  1. テキスト「staff」の前のもの
  2. ファイルサイズ
  3. ファイル名

次に、トークン 2 と 3 を出力します。つまり、出力はバイト数とファイル名です。

8071 sections.php
54681 services.php
37961 style.css
13260 thumb.php
70951 workshops.php
于 2011-12-03T00:25:52.913 に答える
3

次のコマンドを試してください。

GNU stat:

find . -type f -name *.ear -exec stat -c "%n %s" {} ';'

BSD stat:

find . -type f -name *.ear -exec stat -f "%N %z" {} ';'

ただしstat、標準ではないためduwcより良いアプローチになる可能性があります。

find . -type f -name *.ear -exec sh -c 'echo "{} $(wc -c < {})"' ';'
于 2016-02-01T11:51:34.507 に答える
1

あなたはこれを試すことができます:

find. -name *.ear -exec du {} \;

これにより、サイズがバイト単位で表示されます。ただし、duコマンドは、KBの場合はパラメーター-k、MBの場合はパラメーター-mも受け入れます。それはあなたに次のような出力を与えるでしょう

5000  ./dir1/dir2/earFile1.ear
5400  ./dir1/dir2/earFile2.ear
5400  ./dir1/dir3/earFile1.ear
于 2008-09-15T16:56:32.503 に答える
1
find . -name "*.ear" | xargs ls -sh
于 2008-09-15T16:57:16.747 に答える
1
$検索。-name "test *" -exec du -sh {} \;
4.0K ./test1
0 ./test2
0 ./test3
0 ./test4
$

ScripterWorldリファレンス

于 2010-01-05T20:37:22.950 に答える
0
find . -name "*.ear" -exec ls -l {} \;
于 2008-09-15T16:55:16.673 に答える