2012-05-10 128 views
0

我需要一個bash腳本來遞歸地打印文件夾名和文件名(在stdo/p中)。 例如: 我有一個像/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 

現在我需要列出該文件和文件夾像這樣我的意思是我的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 }'` 

上面的命令給了我下面的Ø/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在幾個地方。像

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它將只打印名稱only.so需要這樣的東西。

``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ķ

回答

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:打印字符長度:'打印長度($ NF)' –

0

你可以試試這個 - 充滿了bash化的,不會在其他殼工作:

(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 "*"是多餘的。但你至少需要-type f