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@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.

      • dohpaz42@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        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.