0

フォルダ名とファイル名を再帰的に(stdo / pで)印刷するには、bashスクリプトが必要です。例:/earth/plants/flowers/rose/rose.jpgのようなフォルダ構造があります。

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

今、私はこのファイルとフォルダをこのようにリストする必要があります。つまり、私のO/Pスクリプトは次のようになります。

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

私は試した

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

上記のコマンドは、次の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 

だから私はいくつかの場所に追加のサブキャットをリストする必要があります。お気に入り

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

したがって、単一のスクリプトでそれを行う方法。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

4

2 に答える 2

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
}'
于 2012-05-10T09:20:57.070 に答える
0

これを試すことができます-バシズムがぎっしり詰まっていて、他のシェルでは機能しません:

(find コマンドはここにあります) | 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

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

于 2012-05-30T05:12:24.553 に答える