2012-05-10 5 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 

는 지금은

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를 다음과 제공, 난 내 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를 나열해야합니다. like

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 }'"``. 

덕분에,

답변

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 : 길이를 문자로 출력하려면 :'print length ($ NF)' –

0

당신이 시도 할 수 vijai의 K - bashisms의 꽉 전체, 다른 쉘에서 작동하지 않습니다

(명령이 간다 찾기)| 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을 원할 것입니다.

관련 문제