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
  • Het werkt standaard recursief.

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