TL;DW

# find with grep
# + concatinates results and runs the command once, faster
find . -name "*.txt" -exec grep -l "somename" '{}' '+'

# run a command for each result individually
find . -name "*.txt" -exec basename '{}' \';' |  column

# case insensitive
find -iname "SoMeNaMe.TxT

# file or dir
find -type f
find -type d

# define file owner
find -user Bob

# define file group
find -group wheel

# by permission
find -perm 777

# find by size
find -size +1G
  • vvv
    link
    fedilink
    arrow-up
    57
    ·
    6 months ago

    grep -r exists and is even more faster and doesn’t require passing around file names.

    grep -r --include='*.txt' 'somename' .
    
    • fmstrat@lemmy.nowsci.com
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      6 months ago

      Or use strings if you want clean binary results. (Grep can probably do this, too)

      Edit: Yes, with -b, also -R follows symlinks unlike -r

  • Retiring@lemmy.ml
    link
    fedilink
    arrow-up
    41
    arrow-down
    3
    ·
    6 months ago

    This does not need to be a 8 minute video. Read your tldw instead. Thanks, OP.

  • qjkxbmwvz@startrek.website
    link
    fedilink
    arrow-up
    11
    ·
    6 months ago

    I kinda prefer xargs to the -exec option — just feels more UNIXy to me (do one one job well).

    But as another comment said, for grep I just use -r and --include. So clearly I’m not very consistent…

    • boredsquirrel@slrpnk.netOP
      link
      fedilink
      arrow-up
      3
      arrow-down
      1
      ·
      6 months ago

      It is important to have backups for when Youtube blocks clients, but I just watch it over a VPN and Freetube or Grayjay. Not leeching any resources when avoidable, just costing big brother money.

  • unalivejoy@lemm.ee
    link
    fedilink
    English
    arrow-up
    6
    ·
    edit-2
    6 months ago

    If you have a very large directory, find will check each individual file, even when -path doesn’t match, which makes it take longer to complete. Combine -o and -prune to omit them entirely.

    find . -path '**/node_modules/**' -prune -o -type f -name '*.js' -exec grep 'import' {} +
    
  • toastal@lemmy.ml
    link
    fedilink
    arrow-up
    6
    ·
    6 months ago

    She’s done such a good job with this channel. I understand most of the content, but I always pick up a nugget of new as well as being able to better explain after a topic she ELI5’d

  • Dave@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    6 months ago

    Forgive me for only TLDW and not watching, but was ack mentioned?

    I’ve never looked back.

  • dohpaz42@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    6 months ago

    When using both {} and ;, it’s safer to use single quotes to escape the current argument and ending delimiter; eg ’{}’ and ’;’, respectively.

    • murtaza64
      link
      fedilink
      arrow-up
      3
      ·
      6 months ago

      Why? The quotes will be consumed by the shell when you execute the command, unless you do like "'{}'"