将 -exec {} ls 与 find 命令一起使用时权限被拒绝

Hei*_*erg 4 ls find

运行以下命令时,它会为我permission denied提供所有文件的消息。

find /data/code/ -name "*.jar" -exec {} ls \;


find: `/data/code/project/shared/build/thirdparty/log4j-1.2.8/commons-logging-1.0.4.jar': Permission denied
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

ls  /data/code/project/shared/build/thirdparty/log4j-1.2.8/commons-logging-1.0.4.jar
Run Code Online (Sandbox Code Playgroud)

它打印给出了正确的输出,没有任何permission denied消息。

/data/code/project/shared/build/thirdparty/log4j-1.2.8/commons-logging-1.0.4.jar
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ps:我需要列出并删除所有的jar文件 /data/code

hee*_*ayl 5

做的时候:

find /data/code/ -name "*.jar" -exec {} ls \;
Run Code Online (Sandbox Code Playgroud)

您正在尝试将找到的文件(例如/data/code/project/shared/build/thirdparty/log4j-1.2.8/commons-logging-1.0.4.jarls作为参数执行,导致权限被拒绝错误。

只需切换顺序:

find /data/code/ -name "*.jar" -exec ls {} \;
Run Code Online (Sandbox Code Playgroud)

GNUfind也有-ls选择,所以在 GNU 中find,你可以这样做:

find /data/code/ -name "*.jar" -ls
Run Code Online (Sandbox Code Playgroud)

  • 或者使用`find /data/code -name '*.jar' -ls` (2认同)