我正在尝试查找文件并打印该文件的大小
# 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)
其他人展示了如何获取文件大小,这是您奇怪错误的原因:
由于单引号,这部分
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 就不会试图扩展它。)