Si bien el find
comando es la forma más simple de atravesar recursivamente el árbol de directorios, existen otras formas y, en particular, los dos lenguajes de script que vienen con Ubuntu de manera predeterminada ya tienen la capacidad de hacerlo.
golpetazo
bash
tiene una globstar
opción de shell muy agradable , que permite un recorrido recursivo del árbol de directorios. Todo lo que tenemos que hacer es probar si el elemento en la ./**/*
expansión es un archivo y si contiene el texto deseado:
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 tiene el módulo Buscar, que permite realizar un recorrido recursivo del árbol de directorios y, a través de una subrutina, realizar acciones específicas sobre ellos. Con un pequeño script, puede atravesar el árbol de directorios, insertar archivos que contienen la cadena deseada en la matriz y luego imprimirlo de la siguiente manera:
#!/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"
}
Y como funciona:
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
Pitón
Python es otro lenguaje de script que se usa ampliamente en el mundo de Ubuntu. En particular, tiene un os.walk()
módulo que nos permite realizar la misma acción que antes: recorrer el árbol de directorios y obtener una lista de los archivos que contienen la cadena deseada.
Como una línea, esto se puede hacer así:
$ 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']
El guión completo se vería así:
#!/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
comando está bien, solo actualice el ubicaciónb primero, usando el comandoupdatedb