$ find [path...] [options] [expression] # exemple avec wildcard '*' $ find . -name "*.txt"
Option | Example | Description |
---|---|---|
-type* | find . -type d | Find only directories |
-name | find . -type f -name “*.txt” | Find file by name |
-iname | find . -type f -iname “hello” | Find file by name (case-insensitive) |
-size* | find . -size +1G | Find files larger than 1G |
-user | find . -type d -user jack | Find jack's file |
-regex | find /var -regex '.*/tmp/.*[0-9]*.file' | Using Regex with find |
-maxdepth | find . -maxdepth 1 -name “a.txt” | In the current directory and subdirectories |
-mindepth | find / -mindepth 3 -maxdepth 5 -name pass | Between sub-directory level 2 and 4 |
Option -type | Type de fichier |
---|---|
-type d | Directory |
-type f | File |
-type l | Symbolic link |
-type b | Buffered block |
-type c | Unbuffered character |
-type p | Named pipe |
-type s | Socket |
Option -size | Unité |
---|---|
-size b | 512-byte blocks (default) |
-size c | Bytes |
-size k | Kilobytes |
-size M | Megabytes |
-size G | Gigabytes |
#Find all bigger than 10MB files $ find / -size +10M #Find all smaller than 10MB files $ find / -size -10M #Find all files that are exactly 10M $ find / -size 10M #Find Size between 100MB and 1GB $ find / -size +100M -size -1G
The + and - prefixes signify greater than and less than, as usual.
# Find files using name in current directory $ find . -name tecmint.txt # Find files under home directory $ find /home -name tecmint.txt # Find files using name and ignoring case $ find /home -iname tecmint.txt # Find directories using name $ find / -type d -name tecmint # Find php files using name $ find . -type f -name tecmint.php # Find all php files in directory $ find . -type f -name "*.php" # Multiple filenames $ find . -type f \( -name "*.sh" -o -name "*.txt" \) # Multiple dirs $ find /opt /usr /var -name foo.scala -type f
# Find the files whose permissions are 777. $ find . -type f -perm 0777 -print # Find the files without permission 777. $ find / -type f ! -perm 777 # Find SUID set files. $ find / -perm /u=s # Find SGID set files. $ find / -perm /g=s # Find Read Only files. $ find / -perm /u=r # Find Executable files. $ find / -perm /a=x
# Find single file based on user $ find / -user root -name tecmint.txt # Find all files based on user $ find /home -user tecmint # Find all files based on group $ find /home -group developer # Find particular files of user $ find /home -user tecmint -iname "*.txt"
# Find all empty directories $ find . -type d -empty # Delete all empty files in a directory $ find . -type f -empty -delete
Option | Description |
---|---|
atime | access time (last time file opened) |
mtime | modified time (last time file contents was modified) |
ctime | changed time (last time file inode was changed) |
Example | |
-mtime +0 | Modified greater than 24 hours ago |
-mtime 0 | Modified between now and 1 day ago |
-mtime -1 | Modified less than 1 day ago (same as -mtime 0) |
-mtime 1 | Modified between 24 and 48 hours ago |
-mtime +1 | Modified more than 48 hours ago |
-mtime +1w | Last modified more than 1 week ago |
-atime 0 | Last accessed between now and 24 hours ago |
-atime +0 | Accessed more than 24 hours ago |
-atime 1 | Accessed between 24 and 48 hours ago |
-atime +1 | Accessed more than 48 hours ago |
-atime -1 | Accessed less than 24 hours ago (same as -atime 0) |
-ctime -6h30m | File status changed within the last 6 hours and 30 minutes |
# Find last 50 days modified files $ find / -mtime 50 # find last 50 days accessed files $ find / -atime 50 # find last 50-100 days modified files $ find / -mtime +50 –mtime -100 # find changed files in last 1 hour $ find / -cmin -60 # find modified files in last 1 hour $ find / -mmin -60 # find accessed files in last 1 hour $ find / -amin -60
# Find and remove multiple files $ find . -type f -name "*.mp3" -exec rm -f {} \; # Find and remove single file $ find . -type f -name "tecmint.txt" -exec rm -f {} \; # Find and delete 100mb files $ find / -type f -size +100m -exec rm -f {} \; # Find specific files and delete $ find / -type f -name *.mp3 -size +10m -exec rm {} \;
# Find and copy it to a specific directory $ find . -name '*2020*.xml' -exec cp -r "{}" /tmp/backup \;
$ find . -printf "%T+\t%p\n" | sort $ find . -printf "%T+\t%p\n" | sort -r
$ find . -type f -name "*.java" | xargs tar cvf myfile.tar $ find . -type f -name "*.java" | xargs tar rvf myfile.tar
$ find ./ -type f -exec sed -i 's/find/replace/g' {} \; $ find ./ -type f -readable -writable -exec sed -i "s/old/new/g" {} \;
$ find . -type f -name 'file*' -exec mv {} {}_renamed \; $ find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}.bak"' \;
$ find . -name '*.mp3' -exec mv {} /tmp/music \;
$ find download -type f -iname '*.csv' | xargs cat > merged.csv $ find download -type f -name '*.gz' -exec cat {} \; > output
# Find files and set permissions to 644. $ find / -type f -perm 0777 -print -exec chmod 644 {} \; # Find directories and set permissions to 755. $ find / -type d -perm 777 -print -exec chmod 755 {} \;
$ find ./* -prune -name "*<chaine>*" -mtime 30 | xargs -exec ls -ltr