GNU Find Flashcards: Expressions, Output & Pruning

Predict GNU find output, repair expression grouping and missing prints, and distinguish filtering from directory pruning with 40 short tree-based exercises.

Về bộ thẻ này

Practice GNU find expressions with 40 short, original exercises. Read a complete directory tree and command, predict the printed set, explain a missing result or an unexpected directory, or make a restricted repair. The examples separate expression truth, output actions, and directory descent. All fixtures use regular files and directories; output order is irrelevant.

The cards practice tree + command → output or branch explanation, faulty expression + stated goal → one constrained repair, and two commands with equal output → the difference in visited descendants. They move from name/path matching, shell quoting and implicit AND into precedence, grouping, negation and short-circuit printing, then pruning and mixed diagnosis. Closely related variants are separated by at least three other cards. Arbitrary output → command reversal and exhaustive equivalent rewrites are excluded because they do not give a single useful answer.

Scope: -name, -path, -type f/d, implicit/explicit AND, OR, negation, grouping, explicit/default -print, -prune, and one -depth caution showing why children-before-directory traversal defeats pruning. It is not a complete find course. Time, size and permission filters, depth-limit calculations, deletion, command execution, filename transport, symlinks, filesystem races and BSD/macOS portability are outside this deck.

The original trees, questions, answers and order were created with AI assistance. All 40 original fixtures and seven comparison or repair commands were checked with GNU findutils 4.10.0, both directly and through /bin/sh; visited-entry instrumentation checked traversal claims. Behavior facts were checked against the GNU find manual page and the manual included in the GNU findutils 4.10.0 release source. No manual prose, source code, competitor cards or third-party illustrations were copied. The cover is an original AI-generated illustration. CC0 1.0 applies to the original deck text, organization, metadata and cover to the extent applicable rights exist; factual behavior is not owned, and GNU documentation and source retain their own licenses.

An independent, unofficial learning resource with no affiliation with or endorsement by GNU or the Free Software Foundation.

Thẻ trong bộ này

  1. Thẻ 1

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    atlas/
    atlas/draft/
    atlas/draft/seed.txt
    atlas/seed.txt
    
    find atlas -name 'draft/seed.txt'
    

    Which paths print?

    Câu trả lời

    None. -name tests the final name component, so a pattern containing / cannot match these names.

  2. Thẻ 2

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    bay/
    bay/card.md/
    bay/card.md/inner
    bay/page.md
    bay/readme.txt
    
    find bay -type f -name '*.md'
    

    Which paths print?

    Câu trả lời

    bay/page.md. Adjacent tests mean AND: the entry must be a regular file and have a name ending in .md.

  3. Thẻ 3

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    cedar/
    cedar/one.log
    cedar/two.log
    cedar/raw/
    cedar/raw/three.log
    
    find cedar -name '*.log'
    

    Why keep the quotes around the pattern?

    Câu trả lời

    They pass the literal pattern *.log to find instead of letting the shell expand it. All three .log files print, including cedar/raw/three.log.

  4. Thẻ 4

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    dune/
    dune/keep.txt
    dune/skip.txt
    dune/skip.txt.box/
    
    find dune -type f ! -name 'skip.txt'
    

    Which paths print?

    Câu trả lời

    dune/keep.txt. ! negates the following name test; the regular-file guard still applies.

  5. Thẻ 5

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    ember/
    ember/first.c
    ember/second.h
    ember/cache.h/
    ember/cache.h/chunk
    
    find ember -type f -name '*.c' -o -name '*.h'
    

    Which paths print?

    Câu trả lời

    ember/first.c, ember/second.h, and directory ember/cache.h. AND binds more tightly than OR, so the .h branch has no regular-file guard.

  6. Thẻ 6

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    fern/
    fern/.note.md
    fern/plain.md
    fern/deep/
    fern/deep/.other.md
    
    find fern -name '*.md'
    

    Which paths print?

    Câu trả lời

    All three .md files. GNU find's -name pattern can match a leading dot; the shell receives the quoted pattern unchanged.

  7. Thẻ 7

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    grove/
    grove/pkg/
    grove/pkg/part.txt
    grove/part.txt
    
    find ./grove -path './grove/pkg/part.txt'
    

    Which paths print?

    Câu trả lời

    ./grove/pkg/part.txt. -path matches the encountered path, including the starting point's ./ prefix.

  8. Thẻ 8

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    harbor/
    harbor/red.txt
    harbor/blue.txt
    harbor/green.txt
    
    find harbor \( -name 'red.txt' -o -name 'blue.txt' \)
    

    Why are the parentheses escaped?

    Câu trả lời

    So the shell passes ( and ) as arguments to find for grouping. The printed set is harbor/red.txt and harbor/blue.txt.

  9. Thẻ 9

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    iris/
    iris/a.csv
    iris/b.tsv
    iris/c.txt
    
    find iris -name '*.csv' -o -name '*.tsv' -print
    

    Which paths print?

    Câu trả lời

    iris/b.tsv only. A true .csv branch short-circuits OR before -print; the explicit action also disables default printing for the command.

  10. Thẻ 10

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    juniper/
    juniper/a.dat
    juniper/b.txt
    juniper/folder.dat/
    
    find juniper -type f -a -name '*.dat' -print
    

    If only -a is removed, does the printed set change?

    Câu trả lời

    No. Both forms print only juniper/a.dat; an omitted operator between primaries means AND.

  11. Thẻ 11

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    kestrel/
    kestrel/a.py
    kestrel/b.pyi
    kestrel/stub.pyi/
    
    find kestrel -type f -name '*.py' -o -name '*.pyi'
    

    Add only grouping parentheses so both name alternatives require a regular file. Give the repaired command.

    Câu trả lời

    find kestrel -type f \( -name '*.py' -o -name '*.pyi' \)
    

    This prints kestrel/a.py and kestrel/b.pyi. The type guard now applies to the whole name choice.

  12. Thẻ 12

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    lagoon/
    lagoon/start.txt
    lagoon/end.txt
    lagoon/other.txt
    
    find lagoon -name 'start.txt' -print -o -name 'end.txt'
    

    Does lagoon/end.txt print?

    Câu trả lời

    No. The second branch is true for it, but that branch has no print action. An explicit -print anywhere in the expression disables default printing for the whole command.

  13. Thẻ 13

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    maple/
    maple/red.txt
    maple/blue.txt
    maple/gray.txt
    
    find maple -type f ! \( -name 'red.txt' -o -name 'blue.txt' \)
    

    Which paths print?

    Câu trả lời

    maple/gray.txt. Negating the grouped OR excludes both named files.

  14. Thẻ 14

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    nectar/
    nectar/a.json
    nectar/b.yaml
    nectar/c.ini
    
    find nectar -name '*.json' -o -name '*.yaml' -print
    

    Add only parentheses so either filename branch reaches the final print. Give the repaired command.

    Câu trả lời

    find nectar \( -name '*.json' -o -name '*.yaml' \) -print
    

    Both nectar/a.json and nectar/b.yaml print; the action is now after the grouped choice.

  15. Thẻ 15

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    opal/
    opal/release notes.txt
    opal/release.txt
    opal/notes.txt
    
    find opal -type f -name 'release notes.txt' -print
    

    Which paths print?

    Câu trả lời

    opal/release notes.txt. The quotes make the space-bearing pattern one shell argument; the space is part of the filename.

  16. Thẻ 16

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    pine/
    pine/real.txt
    
    find pine -name 'absent.txt' -print
    

    With readable entries and no I/O errors, what are the output and exit status?

    Câu trả lời

    No paths; exit status 0. A false selection expression is not a process error.

  17. Thẻ 17

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    quartz/
    quartz/hot.txt
    quartz/cold.txt
    quartz/mild.txt
    
    find quartz -type f \( ! -name 'hot.txt' -o ! -name 'cold.txt' \)
    

    Which paths print?

    Câu trả lời

    All three regular files. Every name differs from at least one of the two distinct names; OR of these negatives excludes neither.

  18. Thẻ 18

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    reed/
    reed/pass.txt
    reed/fail.bin
    
    find reed -print -name '*.txt'
    

    Which paths print?

    Câu trả lời

    reed, reed/pass.txt, and reed/fail.bin. -print runs before the name test; a later false result cannot undo output.

  19. Thẻ 19

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    sable/
    sable/r.c
    sable/s.h
    sable/box.h/
    
    find sable \( -name '*.c' -o -name '*.h' \) -type f -print
    

    Which paths print, and does putting the type test after the group break the guard?

    Câu trả lời

    sable/r.c and sable/s.h. It still works: the grouped name choice and the type test are joined by AND before printing.

  20. Thẻ 20

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    tamarind/
    tamarind/cache/
    tamarind/cache/old.txt
    tamarind/fresh.txt
    
    find tamarind -type d -name 'cache' -prune -o -type f -print
    

    Which paths print, and is cache/old.txt visited?

    Câu trả lời

    Only tamarind/fresh.txt prints. The cache directory is encountered and pruned; its child is not visited. The true pruning branch skips the right side of OR.

  21. Thẻ 21

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    umber/
    umber/yes.txt
    umber/no.txt
    
    find umber -name 'yes.txt' -o -name 'no.txt' -print
    

    For umber/yes.txt, is the full expression true, and does it print?

    Câu trả lời

    The expression is true, but it does not print. The left branch succeeds and OR skips the branch containing the only output action.

  22. Thẻ 22

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    violet/
    violet/cache/
    violet/cache/hidden.txt
    violet/live.txt
    
    find violet -name 'cache' -prune -o -type f
    

    Which paths print?

    Câu trả lời

    violet/cache and violet/live.txt. -prune alone does not disable default printing, and the full expression is true for the pruned directory. Its child is not visited.

  23. Thẻ 23

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    willow/
    willow/build/
    willow/build/a.txt
    willow/vendor/
    willow/vendor/b.txt
    willow/src/
    willow/src/c.txt
    
    find willow -type d \( -name 'build' -o -name 'vendor' \) -prune -o -type f -print
    

    Which paths print?

    Câu trả lời

    willow/src/c.txt only. Both directory names are inside the pruning branch, so neither excluded directory's descendants are visited.

  24. Thẻ 24

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    xenia/
    xenia/cache/
    xenia/cache/a.txt
    xenia/b.txt
    
    find xenia -type f ! -path 'xenia/cache/*' -print
    

    Does this prevent traversal into xenia/cache?

    Câu trả lời

    No. It prints only xenia/b.txt, but still visits xenia/cache/a.txt. A path test filters output; it does not stop directory descent.

  25. Thẻ 25

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    yarrow/
    yarrow/cache/
    yarrow/cache/a.txt
    yarrow/src/
    yarrow/src/cache/
    yarrow/src/cache/b.txt
    yarrow/c.txt
    
    find yarrow -path 'yarrow/cache' -prune -o -type f -print
    

    Which regular files print?

    Câu trả lời

    yarrow/src/cache/b.txt and yarrow/c.txt. Only the exact encountered path yarrow/cache is pruned; the nested cache is a different path.

  26. Thẻ 26

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    zinnia/
    zinnia/cache/
    zinnia/cache/a
    zinnia/b
    
    find zinnia -type d -name 'cache' -prune -print
    

    Does the pruned directory print, and are its children visited?

    Câu trả lời

    zinnia/cache prints; its child is not visited. -prune returns true, so AND continues to the explicit -print for that directory.

  27. Thẻ 27

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    acorn/
    acorn/cache
    acorn/src/
    acorn/src/cache/
    acorn/src/cache/a
    acorn/src/live
    
    find acorn -type d -name 'cache' -prune -o -type f -print
    

    Which paths print?

    Câu trả lời

    acorn/cache and acorn/src/live. The type guard keeps the regular file named cache out of the pruning branch; the nested cache directory is pruned.

  28. Thẻ 28

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    birch/
    birch/build/
    birch/build/a.txt
    birch/vendor/
    birch/vendor/b.txt
    birch/c.txt
    
    find birch -name 'build' -o -name 'vendor' -prune -o -type f -print
    

    Which excluded directory still has its child visited and printed?

    Câu trả lời

    birch/build: its a.txt child prints, along with birch/c.txt. Matching the first OR branch skips -prune; only the vendor branch reaches it.

  29. Thẻ 29

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    cobalt/
    cobalt/cache/
    cobalt/cache/a.txt
    cobalt/b.txt
    
    find cobalt -depth -name 'cache' -prune -o -type f -print
    

    Does pruning prevent the cache child's visit or output?

    Câu trả lời

    No. Both cobalt/cache/a.txt and cobalt/b.txt print. -depth processes children before their directory, so pruning that directory comes too late.

  30. Thẻ 30

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    drift/
    drift/cache/
    drift/cache/a.txt
    drift/lib/
    drift/lib/cache/
    drift/lib/cache/b.txt
    drift/c.txt
    
    find drift -type d -name 'cache' -prune -o -type f -print
    

    Which regular files print?

    Câu trả lời

    drift/c.txt only. A directory-name test catches both the top-level cache and the nested one.

  31. Thẻ 31

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    easel/
    easel/a.txt
    easel/sub/
    easel/sub/b.txt
    
    find easel -name 'easel' -prune -o -type f -print
    

    Which paths print?

    Câu trả lời

    None. The starting directory itself matches and is pruned, so none of its descendants are visited.

  32. Thẻ 32

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    flint/
    flint/cache/
    flint/cache/a.txt
    flint/b.txt
    
    find flint -type d -name 'cache' -prune -type f -print
    

    Why does even flint/b.txt fail to print?

    Câu trả lời

    Every primary is joined by AND. Regular files fail -type d; the pruned cache directory fails -type f. No entry reaches -print.

  33. Thẻ 33

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    garnet/
    garnet/cache/
    garnet/cache/a
    garnet/b
    
    find garnet \( -name 'cache' -prune -o -type f \) -print
    

    Which paths print?

    Câu trả lời

    garnet/cache and garnet/b. The final print applies to either successful branch, including the true pruning branch.

  34. Thẻ 34

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    heath/
    heath/cache/
    heath/cache/a
    heath/lib/
    heath/lib/cache/
    heath/lib/cache/b
    heath/c
    
    find heath -path 'heath/cache' -prune -o -type f -print
    

    Replace only -path 'heath/cache' so every directory named cache is pruned, wherever nested. Give the replacement.

    Câu trả lời

    -type d -name 'cache'. The repaired command prints only heath/c; it prunes both cache directories.

  35. Thẻ 35

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    indigo/
    indigo/.stash/
    indigo/.stash/a.txt
    indigo/.memo.txt
    indigo/b.txt
    
    find indigo -type d -name '.stash' -prune -o -type f -name '*.txt' -print
    

    Which paths print?

    Câu trả lời

    indigo/.memo.txt and indigo/b.txt. The hidden directory is pruned, while the quoted name pattern still matches the hidden regular file.

  36. Thẻ 36

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    jasper/
    jasper/build/
    jasper/build/a
    jasper/vendor/
    jasper/vendor/b
    jasper/c
    
    find jasper -name 'build' -o -name 'vendor' -prune -o -type f -print
    

    Add only parentheses so both named directories reach -prune. Give the repaired command.

    Câu trả lời

    find jasper \( -name 'build' -o -name 'vendor' \) -prune -o -type f -print
    

    Only jasper/c prints. Grouping makes either name lead to the pruning action.

  37. Thẻ 37

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    kelp/
    kelp/cache/
    kelp/cache/a.txt
    kelp/b.txt
    
    find kelp -type f ! -path 'kelp/cache/*' -print
    

    Compare with:

    find kelp -path 'kelp/cache' -prune -o -type f -print
    

    Both commands print kelp/b.txt. Which command still visits kelp/cache/a.txt?

    Câu trả lời

    The first command. Its negated path test hides the descendant from output but does not prevent visiting it; the second command prunes the directory.

  38. Thẻ 38

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    linen/
    linen/cache/
    linen/cache/a.md
    linen/report.md/
    linen/report.md/note.txt
    linen/b.md
    
    find linen -type d -name 'cache' -prune -o -type f -name '*.md' -print
    

    Does directory linen/report.md or its child print?

    Câu trả lời

    Neither. The directory fails the regular-file guard, and its child fails the .md name test. Only linen/b.md prints; report.md is still traversed.

  39. Thẻ 39

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    moss/
    moss/cache/
    moss/cache/a
    moss/b
    
    find ./moss -path 'moss/cache' -prune -o -type f -print
    

    Replace only the path pattern so the cache directory is actually pruned. Give the replacement.

    Câu trả lời

    './moss/cache'. Encountered paths retain the starting point's ./; the repaired command prints only ./moss/b.

  40. Thẻ 40

    Câu hỏi

    GNU find; run from this complete tree's parent. Trailing / marks directories; other entries are regular files. Ignore output order.

    north/
    north/cache/
    north/cache/a.c
    north/src/
    north/src/b.c
    north/src/c.h
    north/src/folder.h/
    north/src/folder.h/d.txt
    north/release notes.h
    
    find north -type d -name 'cache' -prune -o -type f \( -name '*.c' -o -name '*.h' \) -print
    

    Which paths print?

    Câu trả lời

    north/src/b.c, north/src/c.h, and north/release notes.h. Pruning excludes the cache subtree; grouping shares the regular-file guard across both suffixes, so folder.h does not print.

A branching folder tree with a glowing teal route to file icons and an amber barrier before a dimmed branch.

40 thẻ

GNU Find Flashcards: Expressions, Output & Pruning

Học bộ thẻ này miễn phí

Nibomo sẽ mở ra để bạn bắt đầu học.