Find (Linux)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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.

Zie ook

Bronnen