NOTA: He intentado implementar la siguiente lógica para cada subdirectorio. Pero no puedo hacerlo.
#!/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
Aquí pasaré solo el nombre del directorio principal y luego mi secuencia de comandos recorrerá cada subdirectorio y verificará los archivos *.v y *.sv para realizar alguna operación y verificará si hay más directorios, etc.
pv_ncvlog es el nombre del directorio principal.
Por ejemplo :
**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/
Respuesta1
Mi solución usando bash. En caso de que desee Bourne Shell, utilice 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
Tenga en cuenta que find
genera todos los directorios en el árbol actual. Si solo desea el primer nivel de directorios, agregue -maxdepth 1
.