각 하위 디렉터리를 반복하고 *.v 또는 *.sv 파일이 있는지 확인하고 싶습니다. 파일이 있으면 csh 스크립트를 사용하여 일부 작업을 수행합니까?

각 하위 디렉터리를 반복하고 *.v 또는 *.sv 파일이 있는지 확인하고 싶습니다. 파일이 있으면 csh 스크립트를 사용하여 일부 작업을 수행합니까?

참고: 각 하위 디렉터리에 대해 아래 논리를 구현하려고 시도했습니다. 그러나 그렇게 할 수는 없습니다.

#!/bin/csh -f
 
setenv option $<
switch ($option)
cd $option
foreach i (`ls`)
pushd $i
foreach j (`ls *.v *.sv`)
#sed -nE 's/^module +([^ (#]+) *[#(].*$/\1/p' $j > mod_name.txt
awk -F'[ \t#(;]+' '/^module/{ print $2}' $j > mod_name.txt
foreach k (`cat mod_name.txt`)
sed -r -i "s/^[ ]*$k/${k}_ext/g" $j
end
end
popd
end

여기에서는 상위 디렉토리 이름만 전달한 다음 스크립트가 각 하위 디렉토리를 반복하고 *.v 및 *.sv 파일을 확인하여 일부 작업을 수행하고 추가 디렉토리를 확인합니다.

pv_ncvlog는 상위 디렉터리 이름입니다.
예를 들어 :

**cd pv_ncvlog**/


SKIP_lna64    bin.hppa/     bin.lnppc/    bin.sun4/     bin/          etc/          lost+found/   test/         
SKIP_lnppc    bin.ibmrs/    bin.lnx86/    bin.sun4v/    customer_lib/ ict/          rd_inca_test/ vplan/        
bin.all/      bin.lna64/    bin.sol86@    bin.wint/     docs/         ifcs/         stream_mgmt/ 

답변1

bash를 사용하는 내 솔루션. Bourne Shell을 원하는 경우 다음을 사용하십시오 for file in $dir/*.v $dir/*.sv.

for dir in $(find . -type d)  # generate all subdirectories
do 
    for file in $dir/*.{v,sv} # generate names of all .v and .sv files
    do 
        # The if below is required because a literal 
        # DIRECTORYNAME/*.{v,sv} will be generated  
        # as $file if there is no file that matches 
        # the wildcard
        if [ -f $file ]        
        then echo $file       # replace this with your awk code
        fi
    done
done

find현재 트리의 모든 디렉터리를 생성합니다 . 첫 번째 수준의 디렉터리만 원하는 경우 -maxdepth 1.

관련 정보