Alors find
la commande est le moyen le plus simple de parcourir récursivement l'arborescence des répertoires, il existe d'autres moyens et en particulier les deux langages de script fournis avec Ubuntu par défaut ont déjà la capacité de le faire.
bash
bash
a une très belle globstar
option shell, qui permet une traversée récursive de l'arborescence des répertoires. Tout ce que nous devons faire est de tester si l'article dans le ./**/*
qu'est-ce qu'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 un module Find, qui permet d'effectuer une traversée récursive de l'arborescence des répertoires, et via un sous-programme d'effectuer une action spécifique sur eux. Avec un petit script, vous pouvez parcourir l'arborescence des répertoires, pousser les fichiers contenant la chaîne souhaitée dans un tableau, puis l'imprimer comme ceci:
#!/usr/bin/env perluse 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 qui est très largement utilisé dans le monde Ubuntu. En particulier, il a os.walk()
module qui nous permet d'effectuer la même action que ci - dessus-parcourir l'arborescence des répertoires et obtenir la liste des fichiers contenant la chaîne souhaitée.
En tant que one-liner, 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 pythonimport 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))