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

use*_*779 2 find awk

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

# find . -name "*.req" -size +1000c -mtime +1 -exec 'awk "{print $5}" "{}"' \;
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

但上述文件存在于该位置。

# ls -lrt l16696092.req
-rw-r----- 1 applgrnt dba 1595 Sep  5 10:35 l16696092.req
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 5

其他人展示了如何获取文件大小,这是您奇怪错误的原因:

由于单引号,这部分

find ... -exec 'awk "{print $5}" "{}"' \;
Run Code Online (Sandbox Code Playgroud)

给出find三个参数,-exec;中间的一个包含awk "{print $5}" "{}"。将{}被替换为当前文件名,说./l16696092.req,造成awk "{print $5}" "./l16696092.req"。由于这是 的第一个参数-exec,因此它被用作运行空格、引号和所有的命令的名称。因此错误。

find -exec 在没有外部引号的情况下效果更好:

find ... -exec awk '{print $5}' {} \;
Run Code Online (Sandbox Code Playgroud)

但是,这当然会运行awk以读取由 找到的文件(的内容)find,而不是获取它们的大小。(我们仍然需要用单引号或反斜杠来引用$in $5,这样 shell 就不会试图扩展它。)

  • 是的,没有必要引用大括号(除非一个正在运行 `fish`),但没关系,`find` 不会看到它们。 (3认同)