
ファイルを探して、そのファイルのサイズを印刷しようとしています。
# 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
答え2
GNUの使用find(1)
:
find . -name '*.req' -type f -size +1000c -mtime +1 -printf "%s\n"
BSDfind(1)
とBSDの場合stat(1)
:
find . -name '*.req' -type f -size +1000c -mtime +1 -exec stat -f %z {} +
答え3
find
代わりに印刷機能を使用してください。
$ find . -name "*.req" -size +1000c -mtime +1 -printf "%s\n"
man find
書式指定子の完全なリストについては、リファレンスを参照してください。
答え4
努力する
find . -name "*.req" -size +1000c -mtime +1 -exec stat -c %s "{}" \;
または検索を使用-ls
find . -name "*.req" -size +1000c -mtime +1 -ls | awk ' ... '
(これはどのように動作するのか分かったので、awkコードを開いたままにしています。したがって、どのファイルがサイズを持っているのかを知る必要があります)