Portál AbcLinuxu, 7. prosince 2025 12:47
Co to zkusit treba takto?
find . -type d | (
read DIRNAME;
while [ -n "$DIRNAME" ]; do
...zpracovani...
read DIRNAME;
done
)
declare -a a
IFS=$'\n' a=($(find . -type d))
for f in "${a[@]}"; do
...
done
i když asi to nějakým trikem s IFS půjde i přímo
for name in `find . -type d | sed 's/ /\\ /g'`ale to by jsi musel udělat pro všechny escape věci co se můžou vyskytnout v názvu jako *, ?, ;, \, <, >, $ atd a to je myslím poněkud nepratické a navíc expanze pomocí `` dělá escape " a ' (trochu pakárna, že). Mnohem bezpečnější je všechno udělat ve findu, pokud to jde (což není asi tento případ) a nebo pokud není potřeba aby to bylo rekurzivně do podadresářů udělat to pomocí bashové expanze.
for name in *
do
if [ -d "$name" -a ! -h "$name" ]
then
co chceš udělat s adresářem, ale nezapomeň to dát do uvozovek
fi
done
a nebo si to udělat i rekurzífor name in $1${1:+/}*
do
if [ -d "$name" -a ! -h "$name" ]
then
echo "$name"
$0 "$name"
fi
done Ale jak tak přemýšlím, na co to chcete použít, tak nakonec se při vytváření href budete muset ten escape udělat, ale na url. Jo a ještě je jak na potvoru problém se skrytými soubory, které zas find najde, ale * expanze ne. pak by to vypadalo asi takhle for name in $1${1:+/}* $1${1:+/}.[^.]*
do
if [ -d "$name" -a ! -h "$name" ]
then
echo "$name"
$0 "$name"
fi
doneUf.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.