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
  • @dohpaz42
    link
    English
    46 months ago

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

    • @[email protected]
      link
      fedilink
      36 months ago

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

      • @dohpaz42
        link
        English
        1
        edit-2
        6 months ago

        Short answer: shell expansion.

        Longer answer:

        Executing a command for each file

        • Run file on every file in or below the current directory.

        $ find . -type f -exec file '{}' \;

        Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.