bash - Please explain the implied -print action in the find command -




i fell trap of believing if find in bash prunes files , finds remaining files (not directories), output remaining files.

it didn't work expected.

here's simplified example. i've directory structure follows:

a ├── 1.log ├── 1.tgz ├── 1.txt ├── b │   ├── 2.log │   ├── 2.tgz │   └── 2.txt ├── c │   ├── 3.log │   ├── 3.tgz │   └── 3.txt └── d     └── e         ├── 4.log         ├── 4.tgz         └── 4.txt 

let's want find files aren't *.log or *.tgz. (i realise that's left *.txt files there's obvious way find those, that's not going case, please indulge me.)

my original command was:

find \( -name '*.log' -o -name '*.tgz' \) -prune -o -type f 

i expected work, listed files:

a/1.log a/b/2.tgz a/b/2.txt a/b/2.log a/d/e/4.log a/d/e/4.txt a/d/e/4.tgz a/1.txt a/1.tgz a/c/3.tgz a/c/3.txt a/c/3.log 

according the man page find:

if whole expression contains no actions other -prune or -print, -print performed on files whole expression true.

to mind, whole expression true *.txt files. if simple like:

find -type f 

the -print implied according above, , files listed.

the thing confused me if add -print end of original command, works expect:

a/b/2.txt a/d/e/4.txt a/1.txt a/c/3.txt 

since kind of expected -print implied anyway, wouldn't expect have effect does.

could please explain how should mentally parse such find commands don't fall traps again?





wiki

Comments

Popular posts from this blog

python - Read npy file directly from S3 StreamingBody -

kotlin - Out-projected type in generic interface prohibits the use of metod with generic parameter -

Asterisk AGI Python Script to Dialplan does not work -