我正在尝试查找文件并仅打印这些文件的大小

我正在尝试查找文件并仅打印这些文件的大小

我正在尝试查找文件并打印该文件的大小

# 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 代码保持打开状态,因为您现在知道如何使其工作,所以您必须弄清楚哪个文件的大小)

相关内容