Find (Linux): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(17 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
Met het commando ''find'' kun je een hoop geinige dingen doen.
+
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.

Zie ook

Bronnen