2011-12-22 7 views
5

que tienen como árbol de directorios:¿Cómo encontrar directorios anidados?

dir11/dir21/dir31......./dirn1 
dir12/dir22/dir32......./dirn2 
dir13/dir23/dir33......./dirn3 

profundidades son diferentes. ¿Es posible encontrar todas las rutas en las que existe el directorio con el archivo x.txt que tiene una longitud> 0? Puede ser necesario usar script bash? Gracias.

Respuesta

1

Más o menos, la necesidad de que, sí ...

for dir in $(find /the/root/dir -type d); do 
    if [ ! -f "$dir/x.txt" ]; then 
     continue 
    fi 
    size=$(stat -c %s "$dir/x.txt") 
    if [ "$size" != "0" ]; then 
     echo $dir 
    fi 
done 
8

creo GNU find puede coincidir con todos los criterios por sí mismo:

$ find /top/dir -not -empty -type f -name x.txt -printf '%h\n' 

Lo anterior busca en forma recursiva /top/dir para que no esté vacía (-not -empty), archivos regulares (-type f) llamados x.txt e imprime los directorios que conducen a estos archivos (-printf '%h\n').

+1

también printf '\ n'! – Benoit

+0

@Benoit, tienes toda la razón. Respuesta reparada, gracias por el aviso :) –

+0

Hmmwait, para mí el OP quiere encontrar los _directorios_ en los que hay tal archivo, esto encuentra archivos, no directorios – fge

3

Probablemente con Buscar Puede utilizar:

find /top/dir -type f -name x.txt -size +1b -printf '%h\n' 
Cuestiones relacionadas