簡體   English   中英

在bash腳本和awk命令中需要幫助

[英]Need help in bash script and awk command

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

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

另外,在find命令上使用-name "*"是多余的。 但是您可能至少需要-type f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM