====== Linux ====== ===== FIND ===== \\ ==== Syntaxe ==== $ find [path...] [options] [expression] # exemple avec wildcard '*' $ find . -name "*.txt" === Options === ^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 | \\ ---- ==== Généralités ==== === size === #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. \\ \\ === name / iname === # 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 \\ === permissions === # 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 \\ === owners and Groups === # 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" \\ === empty === # Find all empty directories $ find . -type d -empty # Delete all empty files in a directory $ find . -type f -empty -delete \\ ---- ==== Date & Time ==== ^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... ==== === Find and delete === # 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 === # Find and copy it to a specific directory $ find . -name '*2020*.xml' -exec cp -r "{}" /tmp/backup \; === Find and sort === $ find . -printf "%T+\t%p\n" | sort $ find . -printf "%T+\t%p\n" | sort -r === Find and tar === $ find . -type f -name "*.java" | xargs tar cvf myfile.tar $ find . -type f -name "*.java" | xargs tar rvf myfile.tar === Find and replace === $ find ./ -type f -exec sed -i 's/find/replace/g' {} \; $ find ./ -type f -readable -writable -exec sed -i "s/old/new/g" {} \; === Find and rename === $ find . -type f -name 'file*' -exec mv {} {}_renamed \; $ find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}.bak"' \; === Find and move === $ find . -name '*.mp3' -exec mv {} /tmp/music \; === Find and concatenate === $ find download -type f -iname '*.csv' | xargs cat > merged.csv $ find download -type f -name '*.gz' -exec cat {} \; > output === Find and chmod === # 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 {} \; \\ ---- ==== Exemples ==== * Liste de fichiers de moins de 30 jours, ordonnée par date dans le répertoire spécifié seulement $ find ./* -prune -name "**" -mtime 30 | xargs -exec ls -ltr \\