Bien que la find
commande soit le moyen le plus simple pour parcourir récursivement l’arborescence de répertoires, il existe d’autres méthodes, notamment les deux langages de script fournis avec Ubuntu par défaut.
frapper
bash
a une très bonne globstar
option shell, qui permet une traversée récursive de l’arborescence. Tout ce que nous avons à faire est de vérifier si un élément de l' ./**/*
extension est un fichier et s'il contient le texte souhaité:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done
./testdir/texts/postgis-2.0.0
Perl
Perl a le module Find qui permet d’effectuer une traversée récursive de l’arborescence de répertoires et d’effectuer une action spécifique sur ces sous-routines. Avec un petit script, vous pouvez parcourir l'arborescence de répertoires, pousser les fichiers contenant la chaîne souhaitée dans un tableau, puis les imprimer comme suit:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @wanted_files;
find(
sub{
-f $_ && $_ =~ $ARGV[0]
&& push @wanted_files,$File::Find::name
}, "."
);
foreach(@wanted_files){
print "$_\n"
}
Et comment ça marche:
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
Python
Python est un autre langage de script très utilisé dans le monde Ubuntu. En particulier, il a un os.walk()
module qui nous permet d’effectuer la même action que celle décrite ci-dessus - arborescence de répertoires et d’obtenir la liste des fichiers contenant la chaîne désirée.
En une ligne, cela peut être fait comme suit:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'
['./testdir/texts/postgis-2.0.0']
Le script complet ressemblerait à ceci:
#!/usr/bin/env python
import os;
for r,s,f in os.walk("."):
for i in f:
if "postgis-2.0.0" in i:
print(os.path.join(r,i))
locate
commande est correcte, il suffit de mettre à jour le situé, en utilisant la commandeupdatedb