find
De utility find
wordt gebruikt om bestanden te vinden.
Meestal gebruikt met de volgende syntax:
$ find <
zoek-directory> -iname <
zoekstring>
voorbeeld:
$ find /usr/share -iname "*.doc"
/usr/share/doc/dictd/security.doc
/usr/share/cvs/contrib/intro.doc
De optie -iname
zoekt niet hoofdlettergevoelig.
Er zijn vele andere opties,
hieronder enkele belangrijke opties met voorbeelden:
-name
zoekt hoofdlettergevoelig
$ find /usr/share -name "*JPG"
/usr/share/games/supertuxkart/data/tracks/jungle/statue.JPG
/usr/share/games/supertuxkart/data/tracks/overworld/door.JPG
-type d
vindt alleen directories
$ find /boot -type d
/boot
/boot/grub
/boot/grub/locale
/boot/grub/i386-pc
/boot/grub/fonts
-type f
vindt alleen files
-type l
vindt alleen symbolic links
$ find /etc/network -type l
/etc/network/if-post-down.d/avahi-daemon
/etc/network/if-post-down.d/wpasupplicant
/etc/network/if-down.d/wpasupplicant
/etc/network/if-up.d/wpasupplicant
/etc/network/run
/etc/network/if-pre-up.d/wpasupplicant
-perm 600
vindt files met permissions rw-------
$ find /etc/NetworkManager -type f -perm 600
/etc/NetworkManager/system-connections/TelenetWiFree
/etc/NetworkManager/system-connections/bbox2-9340
/etc/NetworkManager/system-connections/telenet-C8B32
/etc/NetworkManager/system-connections/BenQ
/etc/NetworkManager/system-connections/MacBook Pro van Charlotte
/etc/NetworkManager/system-connections/bbox2-6bdc
-size +10M
vindt files groter dan 10 Megabyte
$ find / -type f -size +10M 2>/dev/null
/home/bert/PacketTracer62Student/lib/libQtGui.so.4.8.2
/home/bert/PacketTracer62Student/lib/libQtWebKit.so.4.9.2
/home/bert/PacketTracer62Student/PacketTracer6.2.tar.gz
/home/bert/PacketTracer62Student/bin/PacketTracer6
/home/bert/.linuxmint/mintMenu/apt.cache
/home/bert/.mozilla/firefox/mwad0hks.default/places.sqlite
/home/bert/.mozilla/firefox/mwad0hks.default/webappsstore.sqlite
/home/bert/SSDguru/SSDGuru/linux64/SSDGuru
/home/bert/SSDguru/SSDGuru/linux32/SSDGuru
de achteraan toegevoegde 2>/dev/null
verwijdert de error messages uit de scherm-output.
Die error messages krijg je omdat je find
uitvoert als gewone gebruiker, en bijgevolg niet altijd genoeg rechten hebt om bepaalde files of directories te mogen onderzoeken:
find: `/etc/ssl/private': Permission denied
find: `/etc/ppp/peers': Permission denied
find: `/etc/cups/ssl': Permission denied
find: `/etc/chatscripts': Permission denied
-user jonas
vindt files die eigendom zijn van jonas
-group users
vindt files van de groep "users"
alle zoekopties kunnen met mekaar worden gecombineerd.
de optie -exec
De optie -exec
voert commando's uit op individuele resultaten van find
. De tussenresultaten worden voorgesteld door {}
-- de commandostring wordt afgesloten met de combinatie \;
Enkele voorbeelden:
$ find /usr/share/doc -iname "*txt" -exec ls -l {} \;
-rw-r--r-- 1 root root 3862 Jan 28 2015 /usr/share/doc/bluez/agent-api.txt
-rw-r--r-- 1 root root 778 May 31 2011 /usr/share/doc/bluez/sap-api.txt
-rw-r--r-- 1 root root 1824 May 23 2010 /usr/share/doc/bluez/service-api.txt
-rw-r--r-- 1 root root 2371 Jun 13 2012 /usr/share/doc/bluez/hfp-api.txt
-rw-r--r-- 1 root root 972 Jun 13 2012 /usr/share/doc/bluez/control-api.txt
-rw-r--r-- 1 root root 1039 May 23 2010 /usr/share/doc/bluez/input-api.txt
-rw-r--r-- 1 root root 2027 May 23 2010 /usr/share/doc/bluez/manager-api.txt
In het voorbeeld hierboven worden alle bestanden gezocht die eindigen op txt
(niet hoofdlettergevoelig), en het resultaat wordt dan met ls-l
op scherm gebracht.
$ find /usr/share/doc -iname "*txt"
-exec ls -l {} \; -exec cat {} \;
Het voorbeeld hierboven brengt eerst een ls -l
net zoals het eerste voorbeeld, maar brengt daarna ook nog eens dit bestand in zijn geheel op scherm met het commando cat
.
$ find /usr/share/doc -iname "*txt"
-exec ls -l {} \; -exec cat {} \; > find.txt
(alles op één regel) .. Doet hetzelfde als het tweede voorbeeld maar redirect het resultaat naar een bestand met als naam find.txt
in de huidige directory.
nuttige links
tecmint: 35-practical-examples-of-linux-find-command
25 simple examples of Linux find command