2011-12-22 12 views
5

mam drzewo katalogów jak:Jak znaleźć zagnieżdżone katalogi?

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

Głębokości są różne. Czy jest możliwe znalezienie wszystkich ścieżek, na których istnieje katalog z plikiem x.txt o długości> 0? Czy może być potrzebny skrypt bash? Dzięki.

Odpowiedz

1

to dość dużo trzeba, że ​​tak ...

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

wierzę GNU find można dopasować wszystkie kryteria sama:

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

Powyższy rekurencyjnie przeszukuje /top/dir dla niepusty (-not -empty), zwykłe (-type f) pliki o nazwach x.txt i wypisuje katalogi prowadzące do tych plików (-printf '%h\n').

+1

również printf '\ n'! – Benoit

+0

@Benoit, masz absolutną rację. Odpowiedź naprawiona, dzięki za heads-up :) –

+0

Hmmwait, dla mnie OP chce znaleźć _directories_, w którym istnieje taki plik, to znajduje pliki, nie katalogi – fge

3

Prawdopodobnie z znaleźć można użyć:

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