我正在尝试查找文件并打印该文件的大小
# 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
三个参数 ,-exec
,;
中间一个包含awk "{print $5}" "{}"
。被{}
替换为当前文件名,例如./l16696092.req
,结果是awk "{print $5}" "./l16696092.req"
.由于这是 的第一个参数-exec
,因此它被视为要运行的命令的名称空格、引号和所有。因此出现了错误。
find -exec
没有外部引号时效果更好:
find ... -exec awk '{print $5}' {} \;
但是,这当然会运行awk
以读取 找到的文件(内容)find
,而不是获取它们的大小。(我们仍然需要用单引号或反斜杠将 括起来,以便 shell 不会尝试扩展它。$
)$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 代码保持打开状态,因为您现在知道如何使其工作,所以您必须弄清楚哪个文件的大小)