Home > Blockchain >  -exec option of the find command does not work as expected on Ubuntu
-exec option of the find command does not work as expected on Ubuntu

Time:05-04

I am doing some practice on find command but I don't get the expected result when I attempt to use -execoption of it. The command I wrote just works without -exec option as the following:

$ find ~ \( -type f -not -perm 0600 \) -or \( -type d -name 'D*' \)
/home/baki/.bashrc
/home/baki/.bash_logout
/home/baki/.cache/motd.legal-displayed
/home/baki/.config/wslu/baseexec
/home/baki/.config/wslu/oemcp
/home/baki/.gitconfig
/home/baki/.landscape/sysinfo.log
/home/baki/.motd_shown
/home/baki/.profile
/home/baki/.ssh/known_hosts
/home/baki/.sudo_as_admin_successful
/home/baki/ssh_start
/home/baki/token

However, when I add the -exec option to the end of the command, it doesn't give any output:

find ~ \( -type f -not -perm 0600 \) -or \( -type d -name 'D*' \) -exec ls -l '{}' ';'

I have searched about it but I couldn't find a piece of useful information that can solve my problem.

Is my command wrong or is it about something else?

Thank you for your help.

CodePudding user response:

The default -and operation has higher precedence than -or. Use extra parentheses:

find ~ \( \( -type f -not -perm 0600 \) -or \( -type d -name 'D*' \) \) -exec ls -l '{}' ';'

You can probably omit the inner parentheses in this case.

  • Related