ファイルのサイズを確認しながら、同時にファイルを見つけるにはどうすればよいですか?エラー:このコマンドを試しましたが、他のファイルのサイズと詳細しか取得できませんでした。
find -name "*.conf" | ls -l
find
には-ls
オプションがあります。したがって、コマンドは次のようになります。
find -name '*.conf' -ls
オプションは、-printf
で独自の形式を指定します。たとえば、これは、ファイルサイズ、スペース、ファイル名の順に出力します(相対パス付き):
find -name "*.conf" -printf "%s %p\n"
面白いファイル名(改行を含むファイル名など)が予想される場合に、findの出力レコードをNULで分離する場合は、\0
の代わりに\n
でフォーマット文字列を終了できます。
レコードについては、find
からの出力をls
への入力にパイプしようとしているため、質問に示されている試みは機能しません。 ls
はSTDINからの入力を読み取らないため、find
からの出力は単純に破棄され、ls
は通常どおり現在のディレクトリのコンテンツをリストします。
他の答えはすでに指摘しています
ただし、最初と2番目のアプローチではls -l
の正確な出力が得られず(-ls
フラグはls -dils
と等しくなります)、3番目のアプローチでは追加のxargs
呼び出しが必要です。 -exec
フラグを使用すると、find
から直接ls -l
を呼び出すことができます。
find -name "*.conf" -exec ls -l {} +
これにより、ls -l
の引数としてファイル名のリスト全体が提供され、必要な回数だけ呼び出されます。
現在のディレクトリ内およびその下の.conf
で終わるすべてのファイルと一致させたい場合(および ARG_MAX
は問題ではありません!)、実際には必要ありませんfind
at all。代わりに、次のようにbash
とglobstar
シェルオプションでdotglob
のグロブマッチングを使用できます。ファイル名の改行で中断せず、find
のような「隠しファイル」と一致することも同様に賢明です:
$ shopt -s globstar dotglob
$ ls -l **/*.conf
ls
は標準入力からファイルのリストを取得せず、それらが引数であることを期待します。 xargs
コマンドは、入力を引数に変換するための一般的な機能です。
find -name '*.conf' | xargs ls -l
ただし、これは入力を空白で分割するため、名前にスペースが含まれていると問題が発生する可能性があります。 find
とxargs
には、これを緩和するために連携するオプションがあります。
find -name '*.conf' -print0 | xargs -0 ls -l
xargs
の-0
オプションは、入力のパラメーター間の区切り文字としてヌルバイトを使用するように指示し、-print0
はfind
にヌルバイトで区切られた名前を出力するように指示します改行の代わりに。