ファイルを探して、そのファイルのサイズを印刷しようとしています。
# 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}" "{}"' \;
find
3つのパラメータが与えられ-exec
、;
中間パラメータにはが含まれますawk "{print $5}" "{}"
。{}
は現在のファイル名に置き換えられます。たとえば、./l16696092.req
結果awk "{print $5}" "./l16696092.req"
はの最初の引数であるため、-exec
実行するコマンドの名前として扱われます。スペース、引用符、およびすべて。したがって、エラーが発生しました。
find -exec
外部引用符がない場合は、よりうまく機能します。
find ... -exec awk '{print $5}' {} \;
ただし、これはもちろんサイズを取得するのではなく、見つかったawk
ファイル(内容)を読み取るために実行されます。find
(シェルが拡張しようとしないように、単一引用符またはバックスラッシュで囲む必要があります。$
)$5