4

Cygwin経由でbashを使用しています。大きなフォルダ(a)があり、多くのサブフォルダ(b)があります。これらのサブフォルダーには、それぞれ1つまたは2つのサブフォルダーがあります(c)。2つのサブフォルダー(c)を持つすべてのサブフォルダー(b)を見つけて、それらを出力したいと思います。

構造は次のとおりです。

a
 b1
  c1 
 b2
  c1
  c2
 b3
  c1
  c2

findこれまでのところ、メインフォルダー内のすべてのサブフォルダーを出力するために使用およびパイプする方法しか知りません(a)。

find . -type d > folders.txt

b2つのフォルダを持つすべてのフォルダのみcを1行に1つのフォルダを持つテキストファイルに出力するにはどうすればよいですか?(私の例では、出力は次のようになります。

b2
b3
4

4 に答える 4

4

を使用してこれを試してください:

cd a
find . -type d |
awk -F/ '{arr[$2]++}END{for (a in arr) {if (arr[a] == 3) print a}}'

またはを使用する:

cd a
for i in */; do x=( $i/*/ ); (( ${#x[@]} == 2 )) && echo "${i%/}"; done
于 2013-02-16T16:40:02.497 に答える
3

各サブディレクトリからの親ディレクトリリンクがディレクトリのリンク数を1増やすという事実を利用する、はるかに簡単なソリューションがあり..ます。サブディレクトリのないディレクトリのリンク数は2です(.そして、それ自体の親からのリンクはその名前)。したがって、2つのサブディレクトリを持つディレクトリのリンク数は4です。

find . -type d -links 4

ディレクトリへの他のハードリンクを作成することは違法であるため、誤検知が発生しないようにする必要があります。

于 2013-02-17T04:05:21.957 に答える
0

あなたが望むことをする素晴らしいオープンソースユーティリティがあります。これは「ツリー」と呼ばれ、便利なオプションがたくさんあります。ほとんどのLinuxディストリビューションに含まれていますが、Cygwin用にコンパイルできるはずです。

「ツリー」は次の場所にあります:http: //mama.indstate.edu/users/ice/tree/

これにPerlを使用することもできます。Bashシェルスクリプトよりも柔軟性があります。PerlのFile::Findモジュール(http://perldoc.perl.org/File/Find.html)を使用すると、やりたいことが簡単にできます。Cygwin環境にPerlがインストールされていますか?Perlを知っていますか?これを行うためのPerlスクリプトを投稿したい場合はお知らせください。

于 2013-02-16T16:57:59.303 に答える
0

このbashスクリプトを試してください-

#!/bin/bash

cd a
for i in `pwd`/* ; do
  if [ -d "$i" ]; then
    DIR=0;
    cd $i;
    for j in * ; do
    if [ -d "$j" ]; then
    let DIR=DIR+1;
    fi
    done
    if [ $DIR -eq 2 ]; then
    echo $i;
    fi
  fi
done

スクリプトの名前がであると仮定すると、次のtest.shことができます

$./test.sh > folder.txt
于 2013-02-16T17:08:43.923 に答える