2011-12-22 9 views
5

私のようなディレクトリツリーがあります。入れ子になったディレクトリを見つけるには?

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

深さが異なっています。長さ> 0のファイルx.txtを持つディレクトリが存在するすべてのパスを見つけることは可能ですか? bashスクリプトを使用する必要がありますか?おかげさまで

答えて

1

[はい...

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

私はGNU findは、それ自体で、すべての条件に一致することができると信じて、ということはかなり必要があります。

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

上記は、再帰的に(空でないため/top/dirを検索-not -empty)、標準ファイル(-type f)、x.txtという名前のファイルを作成し、これらのファイルに続くディレクトリ(-printf '%h\n')を出力します。

+1

'ものprintf \ N '! – Benoit

+0

@Benoit、あなたは絶対に正しいです。応答は修正されました。ヘッドアップのおかげで修正されました:) –

+0

Hmmwait、私のためにOPはそのようなファイルがある_directories_を探しています。これはディレクトリではなく – fge

3

はおそらくとあなたが使用できます:

find /top/dir -type f -name x.txt -size +1b -printf '%h\n' 
関連する問題