需要帮助bash脚本和awk命令

时间:2012-05-10 08:57:24

标签: linux bash awk

我需要一个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 

所以我需要在很少的地方列出额外的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美元就可以打印出名称。所以需要这样的东西。

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

2 个答案:

答案 0 :(得分: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
}'

答案 1 :(得分:0)

你可以试试这个 - 充满了bashisms的chock,在其他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 "*"是多余的。但你可能至少需要-type f