在bash脚本和awk命令中需要帮助

我需要一个bash脚本recursion地打印文件夹名称和文件名(在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 

所以我需要在less数地方列出额外的子猫。 喜欢

 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

 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 }' 

你可以试试这个 – 塞满了bashisms,不会在其他shell中工作:

(找到命令在这里) | while IFS=/ read root planet category rest; do | 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