Pencarian Dasar
Menjalankan find
find . # list all files recursively find /var/log # search from specific path find . -name "*.txt" # find by name find / -name "config" 2>/dev/null # suppress permission errors find dir1 dir2 -name "*.py" # search multiple directories
Ringkasan Sintaks
find [path...] [tests] [actions]Bentuk umum — path, lalu test, lalu aksi
pathDirektori awal (default: direktori saat ini)
testKondisi filter file (-name, -type, dll.)
actionYang dilakukan pada hasil (-print, -exec, dll.)
Aksi default-print jika tidak ada aksi yang ditentukan
Pola Nama
Pencocokan Nama
find . -name "*.log" # case-sensitive glob find . -iname "readme*" # case-insensitive glob find . -name "*.py" -o -name "*.js" # OR: Python or JS files find . -path "*/src/*.ts" # match against full path find . -regex '.*\.\(py\|js\)' # POSIX regex on full path
Test Nama
-name patternBasename cocok dengan shell glob (case-sensitive)
-iname patternBasename cocok dengan glob (case-insensitive)
-path patternPath lengkap cocok dengan shell glob
-ipath patternPath lengkap cocok dengan glob (case-insensitive)
-regex patternPath lengkap cocok dengan regular expression
-iregex patternPath lengkap cocok dengan regex (case-insensitive)
Filter Tipe
Filter berdasarkan Tipe
find . -type f # regular files only find . -type d # directories only find . -type l # symbolic links find . -type f -name "*.sh" # combine type + name
Tipe File
-type fFile biasa
-type dDirektori
-type lSymbolic link
-type bBlock device
-type cCharacter device
-type pNamed pipe (FIFO)
-type sSocket
-emptyFile atau direktori kosong
Ukuran & Waktu
Contoh Ukuran & Waktu
find . -size +100M # larger than 100 MB find . -size -1k # smaller than 1 KB find . -mtime -7 # modified in last 7 days find . -mmin -30 # modified in last 30 minutes find . -newer reference.txt # newer than reference file
Test Ukuran & Waktu
-size +/-NcUkuran dalam byte (c), kilobyte (k), megabyte (M), gigabyte (G)
-mtime +/-NDimodifikasi N*24 jam lalu (+lebih lama, -lebih baru)
-atime +/-NDiakses N*24 jam lalu
-ctime +/-NStatus berubah N*24 jam lalu
-mmin +/-NDimodifikasi N menit lalu
-newer fileDimodifikasi lebih baru dari file
-newermt dateDimodifikasi setelah tanggal string (GNU)
Izin
Contoh Izin
find . -perm 644 # exact permissions: rw-r--r-- find . -perm -u+x # user has execute bit set find . -perm /o+w # others have write (any match) find . -user root # owned by root find . -group www-data -type f # owned by group
Test Izin
-perm modeKecocokan izin tepat
-perm -modeSemua bit yang ditentukan aktif
-perm /modeSalah satu bit yang ditentukan aktif
-user nameDimiliki oleh user (nama atau UID)
-group nameDimiliki oleh group (nama atau GID)
-nouserTidak ada user yang cocok di /etc/passwd
-nogroupTidak ada group yang cocok di /etc/group
Aksi
Contoh Aksi
find . -name "*.log" -print # print paths (default) find . -name "*.tmp" -delete # delete matching files find . -type f -ls # detailed listing find . -name "*.txt" -print0 # null-delimited output find . -type f -printf "%p %s\n" # custom format (GNU)
Referensi Aksi
-printCetak path (dipisah newline)
-print0Cetak path (dipisah null, aman untuk xargs)
-lsCetak detail file (seperti ls -dils)
-deleteHapus file yang cocok (mengimplikasikan -depth)
-printf formatFormat output kustom (GNU): %p path, %s ukuran, %t waktu
-fprint fileTulis path ke file
-quitKeluar setelah kecocokan pertama
Menggabungkan Test
Operator Logika
find . -name "*.py" -type f # implicit AND find . -name "*.py" -a -size +10k # explicit AND find . -name "*.py" -o -name "*.js" # OR find . ! -name "*.log" # NOT find . \( -name "*.py" -o -name "*.js" \) -type f
Referensi Operator
expr1 expr2 / expr1 -a expr2AND — keduanya harus true (default)
expr1 -o expr2OR — salah satu harus true
! expr / -not exprNOT — negasikan ekspresi
\( expr \)Kelompokkan ekspresi (escape tanda kurung di shell)
Urutan evaluasiKiri ke kanan; -a lebih kuat dari -o
Exec & Delete
Contoh Exec
find . -name "*.sh" -exec chmod +x {} \; find . -name "*.log" -exec rm {} + find . -type f -exec grep -l "TODO" {} + find . -name "*.bak" -ok rm {} \; # prompt before each find . -name "*.tmp" -print0 | xargs -0 rm
Referensi Exec
-exec cmd {} \;Jalankan cmd sekali per file ({} = path file)
-exec cmd {} +Jalankan cmd dengan beberapa file sekaligus (lebih cepat)
-ok cmd {} \;Seperti -exec tapi minta konfirmasi
-execdir cmd {} \;Jalankan cmd dari direktori file
xargs -0Dipasangkan dengan -print0 untuk pemrosesan batch yang aman
-deleteHapus file; proses dari terdalam terlebih dahulu
Kedalaman & Pruning
Contoh Kedalaman & Prune
find . -maxdepth 1 -type f # current dir only find . -mindepth 2 -name "*.py" # skip top-level find . -name ".git" -prune -o -print # skip .git dirs find . -depth -name "*.tmp" -delete # process children first
Opsi Kedalaman
-maxdepth NTurun maksimal N level (0 = hanya path awal)
-mindepth NJangan terapkan test pada level kurang dari N
-depthProses isi direktori sebelum direktori itu sendiri
-pruneJangan masuk ke direktori yang cocok
-mount / -xdevJangan melewati batas filesystem
-follow / -LIkuti symbolic link
Pola Umum
One-Liner
find . -name "*.pyc" -delete # clean Python bytecode find . -type f -size 0 -delete # remove empty files find . -mtime +30 -name "*.log" -delete # purge old logs find . -type f -name "*.md" | wc -l # count Markdown files find . -type d -empty -delete # remove empty dirs
Resep
Cari file terbesarfind . -type f -printf '%s %p\n' | sort -rn | head
Cari duplikat berdasarkan namafind . -type f | awk -F/ '{print $NF}' | sort | uniq -d
Ganti nama ekstensifind . -name '*.txt' -exec rename 's/.txt/.md/' {} +
Cari broken symlinkfind . -xtype l
Arsip file terbarufind . -mtime -7 -print0 | tar czf recent.tar.gz --null -T -
Cari dalam file kodefind . -name '*.py' -exec grep -l 'pattern' {} +