2012-05-10 10 views
0

フォルダ名とファイル名を再帰的に(stdo/pで)表示するにはbashスクリプトが必要です。 例: 私は/earth/plants/flowers/rose/rose.jpgのようなフォルダ構造を持っています。bashスクリプトとawkコマンドのヘルプが必要

/earth/plant/fruits/apple/apple.jpg. 
/earth/animals/carni/lions.jpg 
/earth/animals/herbi/omni/dog.jpg 

今私は、コマンド上記

`find/-name "*" -print | awk -F"/" '{ print "\n planet=",$2,"\n category=",$3,"\n sub cat=",$4,"\n Name=",$5, $6 }'` 

を試してみました

planet=earth 
category=animal (plant) 
sub cat = carni 
name = lion.jpg. 

、私のO/Pスクリプトがあるべき私が意味する、このように、このファイルとフォルダの一覧を表示する必要はO、次の私を与えます/ P。

planet=earth 
category=animal (plant) 
sub cat = carni 
name = lion.jpg 

しかし、いくつかのケースでは私のような順序が出力に変更され、この場合の「/earth/animals/herbi/omni/rabbit.jpg」のような追加のフォルダました:

planet=earth 
category=animal 
sub cat = herbi 
name = omni 
rabbit.jpg 

ので、私はいくつかの場所で追加のSUBCATをリストする必要があります。 like

planet=earth 
category=animals 
sub cat = herbi 
add cat = omni 
name = rabbit.jpg 

このように1つのスクリプトで行う方法です。awk以外のスクリプトも歓迎します。

`find/-name "*" -print | awk -F"/" '{ print "\n planet=",$2,"\n category=",$3,"\n sub cat=",$4,"\n Name=",$5,$6}`` 

この場合、$ 5には名前だけで印刷されます。このようなものが必要です。

``find/-name "*" -print | awk -F"/" '{ print "\n planet=",$2,"\n category=",$3,"\n sub cat=",$4,"\n add cat =",$5,(if $5 = foldername print "add cat = omni") name = $6 }'"``. 

おかげで、 vijai kの

答えて

5
awk -F"/" '{ 
    print "\n planet=", $2, "\n category=", $3, "\n sub cat=", $4 
    for (i = 5; i < NF; i++) print " add cat=", $i 
    print " Name=",$NF 
}' 
+0

こんにちは、ありがとうございます。 – vijai

+0

$ NFのサイズを表示したい場合はもう一度ヘルプが必要ですが、どうすればよいですか? – vijai

+0

@vijai:長さを文字で表示するには: 'print length($ NF)' –

0

あなたはこれを試みることができる - bashismsがぎっしり詰まっ、他のシェルでは動作しません。

(コマンドをここに見つける。)| while IFS=/ read root planet category rest; do

echo "planet=$planet" 
    echo "category=$category" 
    size="$(stat -c %s "/$planet/$category/$rest")" 
    while [[ "$rest" == */* ]]; do 
     subcat="${rest%%/*}" 
     rest="${rest#*/}" 
     echo "subcategory=$subcat" 
    done 
    echo "name=$rest" 
    echo "size=$size" 
    echo 
done 

また、 findコマンドの-name "*"は冗長です。しかし、少なくとも-type fが必要です。

関連する問題