Find (Linux): verschil tussen versies
(→exec) |
|||
(17 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | Met het commando ''find'' kun je | + | Met het commando ''find'' kun je bestanden en mappen vinden, en daar allerlei geinige dingen mee doen. |
− | == Recursief alle bestanden van een bepaald type verwijderen == | + | * Ik geloof dat het ''niet'' bedoeld is om ''in'' bestanden te zoeken. Daarvoor moet je [[Zoeken | hier]] zijn |
+ | * Het werkt standaard recursief. | ||
+ | |||
+ | ''' Wat ik meestal zoek ''' | ||
+ | |||
+ | <pre> | ||
+ | cd ~ | ||
+ | find -name "wp_sr*" | ||
+ | </pre> | ||
+ | |||
+ | == 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): | ||
+ | |||
+ | <pre> | ||
+ | ./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 | ||
+ | </pre> | ||
+ | |||
+ | 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 <code>-type d</code> filter je op directories (dus andere objecten worden uitgefilterd). Bv.: | ||
+ | |||
+ | cd ~ | ||
+ | find Dropbox/Music -type d | ||
+ | |||
+ | Output: | ||
+ | |||
+ | <pre> | ||
+ | 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) | ||
+ | </pre> | ||
+ | |||
+ | === Tekststring === | ||
+ | |||
+ | Met <code>-name</code> 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": | ||
+ | |||
+ | <pre> | ||
+ | ./Johnny Cash | ||
+ | ./John Mayer | ||
+ | ./Johnny McEvoy | ||
+ | ./John Denver | ||
+ | ./Johnny Hiatt | ||
+ | </pre> | ||
+ | |||
+ | === Negate === | ||
+ | |||
+ | Met <code>!</code> kun je dingen uitzonderen [https://superuser.com/questions/397307/how-to-ignore-certain-filenames-using-find]. Bv. | ||
+ | |||
+ | find / -name "*.mp4" ! -name "*salsa*" | ||
+ | |||
+ | maar vooralsnog lijkt het niet te werken zoals ik bedoel. | ||
+ | |||
+ | == exec == | ||
+ | |||
+ | 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> | ||
+ | cd ~/Dropbox | ||
+ | find -name "config-livewaf.php" -exec chmod o+r {} \; | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | cd /var/www | ||
+ | sudo find -name "robots.txt" -exec rm {} \; | ||
+ | </pre> | ||
+ | |||
+ | == Voorbeelden == | ||
+ | |||
+ | === Recursief alle bestanden van een bepaald type verwijderen === | ||
+ | |||
+ | Dit gebruikte ik om besmette bestanden uit een download-map te verwijderen: | ||
Test: | Test: | ||
Regel 10: | Regel 130: | ||
find . -name "*.php" -type f -delete | 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 == | ||
+ | |||
+ | * [[Zoeken]] | ||
== Bronnen == | == Bronnen == | ||
− | * https://math2001.github.io/post/bashs-find-command/ | + | * https://math2001.github.io/post/bashs-find-command/ → Handig om 't te leren |
* https://askubuntu.com/questions/377438/how-can-i-recursively-delete-all-files-of-a-specific-extension-in-the-current-di | * https://askubuntu.com/questions/377438/how-can-i-recursively-delete-all-files-of-a-specific-extension-in-the-current-di | ||
+ | * https://superuser.com/questions/397307/how-to-ignore-certain-filenames-using-find |
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.