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.
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. Bv.:
cd /var/www/example.com/sites/default/files find -name "*.php" -exec rm {} \;
Om alle geüploade PHP-bestanden te verwijderen uit een boom.
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.