ファイルを探して、そのファイルのサイズだけを印刷しようとしています。

ファイルを探して、そのファイルのサイズだけを印刷しようとしています。

ファイルを探して、そのファイルのサイズを印刷しようとしています。

# find . -name "*.req" -size +1000c -mtime +1 -exec 'awk "{print $5}" "{}"' \;

出力:

find: awk "{print $5}" "./l16696092.req": No such file or directory
find: awk "{print $5}" "./l16696113.req": No such file or directory
find: awk "{print $5}" "./l16696114.req": No such file or directory
find: awk "{print $5}" "./l16696099.req": No such file or directory
find: awk "{print $5}" "./l16696096.req": No such file or directory
find: awk "{print $5}" "./l16696116.req": No such file or directory
find: awk "{print $5}" "./l16696100.req": No such file or directory
find: awk "{print $5}" "./l16696117.req": No such file or directory

ところで、上記のファイルがその場所に存在します。

# ls -lrt l16696092.req
-rw-r----- 1 applgrnt dba 1595 Sep  5 10:35 l16696092.req

ベストアンサー1

他の人々は、奇妙なエラーの原因であるファイルサイズを取得する方法を示しました。

一重引用符のため、この部分は

find ... -exec 'awk "{print $5}" "{}"' \;

find3つのパラメータが与えられ-exec;中間パラメータにはが含まれますawk "{print $5}" "{}"{}は現在のファイル名に置き換えられます。たとえば、./l16696092.req結果awk "{print $5}" "./l16696092.req"はの最初の引数であるため、-exec実行するコマンドの名前として扱われます。スペース、引用符、およびすべて。したがって、エラーが発生しました。

find -exec外部引用符がない場合は、よりうまく機能します。

find ... -exec awk '{print $5}' {} \;

ただし、これはもちろんサイズを取得するのではなく、見つかったawkファイル(内容)を読み取るために実行されます。find(シェルが拡張しようとしないように、単一引用符またはバックスラッシュで囲む必要があります。$$5

おすすめ記事