Find (Linux)
Met het commando find kun je bestanden en mappen vinden, en daar allerlei geinige dingen mee doen.
- Ik geloof dat het niet bedoeld is om in bestanden te zoeken. Daarvoor moet je hier zijn
- Het werkt standaard recursief.
Wat ik meestal zoek
cd ~ find -name "wp_sr*"
Basis
Met
find
krijg je een recursieve lijst van alle bestanden (inclusief paden).
Als ik dat commando geef in m'n muziek-map, krijg ik bv. een lijst met 2.566 regels, die echter niet is gealfabetiseerd. Laatste entries (na alfabetiseren):
./Yann Tiersen - Tout est Calme/Yann Tiersen - Tout est Calme - 09 - L'étal.mp3 ./Yann Tiersen - Tout est Calme/Yann Tiersen - Tout est Calme - 10 - La Decouverte.mp3 ./Yann Tiersen/Yann Tiersen - Comptine d'un Autre Été - Extended version.mp3 ./Yann Tiersen/Yann Tiersen - Inédit.mp3 ./Yann Tiersen/Yann Tiersen - Le jour d'avant.mp3 ./Yann Tiersen/Yann Tiersen - Le Quartier (live@werchter 2002).mp3 ./Yann Tiersen/Yann Tiersen - Les Oiseaux de Passages - 01 Le Parapluie.mp3 ./Yann Tiersen/Yann Tiersen - Monochrome (live@werchter 2002).mp3 ./Yann Tiersen/Yann Tiersen - Printemps de Bourges - A Quai.mp3 ./Yann Tiersen/Yann Tiersen - Printemps de Bourges - Rue des Cascades.mp3 ./Yann Tiersen/Yann Tiersen - Rue des cascades (Film Version).mp3 ./Youssou N'Dour & Neneh Cherry ./Youssou N'Dour & Neneh Cherry/Youssou N'Dour & Neneh Cherry - 7 Seconds.mp3 ./Zaz ./Zaz/Zaz - Je veux (karaoke).mp3 ./Zaz/Zaz - Je veux.mp3 ./Zoe Keating ./Zoe Keating/Zoe Keating - Legions (War).mp3
Je kunt aangeven waar-ie moet beginnen met zoeken. Alternatief op het voorbeeld hiervoor:
find Dropbox/Music
Tests
Je kunt op verschillende manieren filteren. Die filters heten tests.
Directories
Met -type d
filter je op directories (dus andere objecten worden uitgefilterd). Bv.:
cd ~ find Dropbox/Music -type d
Output:
Dropbox/Music/K's Choice - Almost Happy/CD1 Dropbox/Music/K's Choice - Almost Happy/CD2 Dropbox/Music/Radiohead - OK Computer Dropbox/Music/Marlene Dietrich Dropbox/Music/Yann Tiersen - Black Session (Live)
Tekststring
Met -name
filter je op tekststring. Bv.:
find -name "*.mp4"
om een filmpje terug te vinden.
Of
cd Dropbox/Music find -type d -name "John*"
om alle mappen te vinden die beginnen met "John":
./Johnny Cash ./John Mayer ./Johnny McEvoy ./John Denver ./Johnny Hiatt
Negate
Met !
kun je dingen uitzonderen [1]. Bv.
find / -name "*.mp4" ! -name "*salsa*"
maar vooralsnog lijkt het niet te werken zoals ik bedoel.
exec
Met -exec
kun je de uitvoer van find gebruiken als input voor een executable. Voorbeelden:
cd /var/www/example.com/sites/default/files find -name "*.php" -exec rm {} \;
cd ~/Dropbox find -name "config-livewaf.php" -exec chmod o+r {} \;
cd /var/www sudo find -name "robots.txt" -exec rm {} \;
Voorbeelden
Recursief alle bestanden van een bepaald type verwijderen
Dit gebruikte ik om besmette bestanden uit een download-map te verwijderen:
Test:
find . -name "*.php" -type f
Echt:
find . -name "*.php" -type f -delete
Kickboks-filmpje terugvinden!
Ik zocht een filmpje van zes jaar geleden in een externe backup-map.
Commando
find -name "*.mp4"
retourneerde alle mp4-bestanden, en dat was nogal veel, plus dat het een paar minuten duurde. Commando
find -name "*.mp4" | grep "kick"
gaf resultaat in een paar seconde - Knap dat het niet een paar minuten duurde.
Ook interessant: Met
cd / sudo find -name "*.mp4"
Werden de prullenbakken in de backup ook doorzocht. Ik geloof dat-ie dat anders niet deed.
De gezochte bestanden vond ik uiteindelijk met
find / -name "*.mp4" | grep evecht
Ik wist niet of ik gevecht met of zonder hoofdletter zou schrijven, en find is case-sensitive.