Линукс и шел скриптинг – корисне find команде

Овде су неке од find команди које се често користе на Линуксu, тј које бар ја често користим у разним shell скриптама, већином за брисање неких старих логова, детекције превеликих фајлова, архивирање и копирање фајлова измењењих у неко одређено време и слично.

Претражи фајл који се зове httpd.conf на целом компјутеру

find / -type f -name "httpd.conf" 2> /dev/null

Објашњење:
find – команда за претрагу
/ – где претражујеш (у овом случају root свих фолдера). Погледати хијерархију фајлова на Линуксu
type – тип фајла (f – фајл, d – фолдер, l – symlink)
name – реч или део речи (користити wildcard) који се тражи
2> /dev/null – грешке приликом претраге 2> (обично се јављају кад немате овлашћења да приступите неком фолдеру или фајлу) шаљи у црну рупу (/dev/null)

Пронађи ми у фолдеру /tmp али не и подфолдерима, све фајлове који у називу садрже реч „fraza“ а да су новији од 25.11.2015 17:00 – и то што нађеш премести у фолдер /home/draza

find /tmp/ -maxdepth 1 -newermt "2015-11-25 17:00:00" -type f -name "*fraza*" -exec mv {} /home/draza \;

Објашњење:
maxdepth – колико нивоа у дубину (подфолдера) да претражује (1 само тренутни фолдер без подфолдера)
newermt – фајл је раније (newer) мењан (m) од времена (t) који се наводи као аргумент (у овом примеру 2015-11-25 17:00:00)
exec – изврши команду над резултатима {}

Пронађи ми у фолдеру /tmp и његовим подфолдерима све фајлове са ектензијом log и да почињу фразом Program а да при том fraza „Program“ може бити било каквим словима (није case sensitive), а којима ништа није мењано дуже од 3 дана и то што нађеш обриши (прво излистајте фајлове покретањем команде без дела који почиње са -exec да не бисте обрисали нешто што не треба)

find /tmp -type f -iname "program*.log" -mtime +3 -exec rm {} \;

Објашњење (а да израза нема у горњем примеру):
iname – исто као и наме али небитно да ли су слова велика или мала
mtime – време кад је фајл измењен је већи од 3 дана (зато +3, да је -3 значило би да је фајл измењен у последња 3 дана)

Пронађи ми све фајлове у фолдеру /tmp које је неко отварао (vi, grep, cat….) у последњих 10 дана, небитно да ли је нешто мењао или не

find /tmp/ -type f -atime -10

Објашњење:
atime – access time (мање од 10 дана)

Запакуј ми у неку архиву све фајлове у фолдеру /tmp који су данас мењани

tar -czvf ../danas_menjani_fajlovi.tar.gz `find /tmp -type f -daystart -ctime -1`

Објашњење:
ctime – фајл је промењен у ПАРАМЕТАР*24 сати (у овом случају у последњих 24 сата)
daystart – али од почетка данашњег дана

Пронађи ми све фајлове из фолдера /tmp који се не зову program.sh

find /tmp -not -name "program.sh"

Објашењење:
not (параметар) – провалите сами чему служи not

Пронађи ми све фајлове у фолдеру /tmp који су новији од фајла /home/draza/testfajl.txt

find /tmp -newer /home/draza/testfajl.txt

Пронађи ми све фајлове у фолдеру у ком се сад налазим а који имају full пермисије (777)

find . -type f -perm 0777

Пронађи ми све фајлове у фолдеру /tmp са 777 пермисијом, излистај их и промени им пермисију на 644

find /tmp -type f -perm 0777 -print -exec chmod 644 {} \;

Нађи ми све фајлове у фолдеру /tmp којима је owner draza

find /tmp -user draza

Пронађи ми све фајлове у фолдеру /tmp који су промењени у последња 2 сата (120 минута)

find /tmp -mmin -120

Објашењење:
mmin – modification time (време измене фајла) је одрађено у: -120 у последњих 120 минута, 120 пре тачно 120 минута, +120 пре више од 120 минута

Дај ми све фајлове из фолдера /tmp који су већи од 5 а мањи од 10GB

find /tmp -size +5G -size -10G

Пронађи све шпијуне у држави – и те које нађеш обради да то више не буду а и укини им нека права због шпијунаже

find /home/srbija -type f -not -user srbija -exec chown srbija {} \; -exec chmod 400 {} \;