0

我需要一个 bash 脚本来递归地打印文件夹名称和文件名(在 stdo/p 中)。例如:我有一个像 /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 }'"``.

谢谢,维杰

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

你可以试试这个 - 塞满了 bashisms,在其他 shell 中不起作用:

(查找命令在这里) | 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 回答