0

unixの「find」コマンドでソートされたディレクトリ/ファイルリストを取得しようとしています。

# find . -type f 
.
./bin
./data
./data/disks
./inc
./inc/calls
./inc/calls/show
./inc/calls/show/system
./inc/calls/show/cli
./inc/calls/show/network
./inc/calls/show/stats
./inc/calls/services
./inc/calls/services/ntp
./inc/calls/services/tsa
./inc/calls/services/webgui
./inc/calls/services/engine
./inc/calls/system
./inc/calls/change
./inc/calls/change/password
./inc/calls/change/network
./inc/calls/disk
./inc/calls/disk/encr
./inc/etc

次のように並べ替えます。

./inc/calls/show/system \    
./inc/calls/show/cli \
./inc/calls/show/network \
./inc/calls/show/stats \
./inc/calls/services/ntp \
./inc/calls/services/tsa \
./inc/calls/services/webgui \
./inc/calls/services/engine \
./inc/calls/change/password \
./inc/calls/change/network \
./inc/calls/disk/encr \
./inc/calls/system \
./inc/calls/change \
./inc/calls/services \
./inc/calls/disk \
./inc/calls/show \
./inc/calls \
./data/disks \
./inc/etc \
./bin \
./data \
./inc

どのノード(ディレクトリ/ファイル)がより多くの子(ディレクトリ/ファイル)を持っているかを最初にすべきです...私はbashまたはpythonでそれをやりたいです...それを行うための最良の方法は何ですか?

4

2 に答える 2

1

/フィールド数を含む行を一致/させ、区切り文字として使用して行の前に追加し、フィールド数で並べ替えて、カウントを削除します。

$ awk -F/ '/\//{print NF,$0}' file | sort -nrk1 | cut -d' ' -f2-
./inc/calls/show/system
./inc/calls/show/stats
./inc/calls/show/network
./inc/calls/show/cli
./inc/calls/services/webgui
./inc/calls/services/tsa
./inc/calls/services/ntp
./inc/calls/services/engine
./inc/calls/disk/encr
./inc/calls/change/password
./inc/calls/change/network
./inc/calls/system
./inc/calls/show
./inc/calls/services
./inc/calls/disk
./inc/calls/change
./inc/etc
./inc/calls
./data/disks
./inc
./data
./bin
于 2013-01-29T12:57:24.590 に答える
0

私はPythonを使用して、変換を試みます。

a/b
a/c
b/e/f
b/e/g

次のようなもので:

{'a': {'b': {}, 'c': {}},
'b': {'e': {'f': {}, 'g': {}}},
} 

これを達成するには:

def add_list_to_dict(lst,d):
   key, lst = lst[0], lst[1:]
   if not key in d:
       d[key] = {}
   if lst:
       add_list_to_dict(lst,d[key])

d = {}
for path in paths:
    add_list_to_dict(path.split('/'),d)
于 2013-01-29T12:59:13.820 に答える