Find (Linux): verschil tussen versies
(→exec) |
(→exec) |
||
(4 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
Met het commando ''find'' kun je bestanden en mappen vinden, en daar allerlei geinige dingen mee doen. | 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 | + | * Ik geloof dat het ''niet'' bedoeld is om ''in'' bestanden te zoeken. Daarvoor moet je [[Zoeken | hier]] zijn |
* Het werkt standaard recursief. | * Het werkt standaard recursief. | ||
+ | |||
+ | ''' Wat ik meestal zoek ''' | ||
+ | |||
+ | <pre> | ||
+ | cd ~ | ||
+ | find -name "wp_sr*" | ||
+ | </pre> | ||
== Basis == | == Basis == | ||
Regel 93: | Regel 100: | ||
== exec == | == exec == | ||
− | Met <code>-exec</code> kun je de uitvoer van ''find'' gebruiken als input voor een executable. | + | Met <code>-exec</code> kun je de uitvoer van ''find'' gebruiken als input voor een executable. Voorbeelden: |
− | + | <pre> | |
− | + | cd /var/www/example.com/sites/default/files | |
− | + | find -name "*.php" -exec rm {} \; | |
− | + | </pre> | |
− | |||
− | |||
<pre> | <pre> | ||
cd ~/Dropbox | cd ~/Dropbox | ||
find -name "config-livewaf.php" -exec chmod o+r {} \; | find -name "config-livewaf.php" -exec chmod o+r {} \; | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | cd /var/www | ||
+ | sudo find -name "robots.txt" -exec rm {} \; | ||
</pre> | </pre> | ||
Huidige versie van 19 feb 2022 om 19:03
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.