Walk a directory/Recursively: Difference between revisions

→‎{{header|UNIX Shell}}: this version does not use external programs like grep or find
m (→‎{{header|Smalltalk}}: several bug fixes that prevented the full deep exploration)
(→‎{{header|UNIX Shell}}: this version does not use external programs like grep or find)
Line 526:
=={{header|UNIX Shell}}==
{{works with|Bourne Again SHell}}
<lang bash>#! /bin/bash
<pre>
tree -fi /usr/share/man/ | grep printf
 
indent_print()
/usr/share/man/fr/man1/printf.1.bz2
{
/usr/share/man/fr/man3/asprintf.3.bz2
for((i=0; i < $1; i++)); do
/usr/share/man/fr/man3/dprintf.3.bz2
echo -ne "\t"
/usr/share/man/fr/man3/fprintf.3.bz2
done
/usr/share/man/fr/man3/fwprintf.3.bz2
echo "$2"
/usr/share/man/fr/man3/printf.3.bz2
}
/usr/share/man/fr/man3/snprintf.3.bz2
/usr/share/man/fr/man3/sprintf.3.bz2
/usr/share/man/fr/man3/swprintf.3.bz2
/usr/share/man/fr/man3/vasprintf.3.bz2
/usr/share/man/fr/man3/vdprintf.3.bz2
/usr/share/man/fr/man3/vfprintf.3.bz2
/usr/share/man/fr/man3/vfwprintf.3.bz2
/usr/share/man/fr/man3/vprintf.3.bz2
/usr/share/man/fr/man3/vsnprintf.3.bz2
/usr/share/man/fr/man3/vsprintf.3.bz2
/usr/share/man/fr/man3/vswprintf.3.bz2
/usr/share/man/fr/man3/vwprintf.3.bz2
/usr/share/man/fr/man3/wprintf.3.bz2
/usr/share/man/man1/printf.1.bz2
/usr/share/man/man3/ber_printf.3.bz2
/usr/share/man/man3/curl_mprintf.3.bz2
</pre>
 
walk_tree()
works with all - standard commands are fair game.
{
find /usr/share/man -name '*printf*'
local oldifs bn lev pr pmat
if [[ $# -lt 3 ]]; then
if [[ $# -lt 2 ]]; then
pmat=".*"
else
pmat="$2"
fi
walk_tree "$1" "$pmat" 0
return
fi
lev=$3
[ -d "$1" ] || return
oldifs=$IFS
IFS="
"
for el in $1/*; do
bn=$(basename "$el")
if [[ -d "$el" ]]; then
indent_print $lev "$bn/"
pr=$( walk_tree "$el" "$2" $(( lev + 1)) )
echo "$pr"
else
if [[ "$bn" =~ $2 ]]; then
indent_print $lev "$bn"
fi
fi
done
IFS=$oldifs
}
 
walk_tree "$1" "\.sh$"</lang>
 
=={{header|UnixPipes}}==