Portál AbcLinuxu, 30. prosince 2025 16:02
rekurse()
{
for f in *; do
echo "$PWD/$f"
if [ -d "$f" ]; then
cd "$f"
ls
recurse
cd ..
fi
done
}
recurse
ale asi je to blbost, protoze to nefunguje..:)
mohl by mi nekdo prosim poradit? diky..
ls -R?
ls -A1R je tomu teda bliz...
find nebo ls -R, ale k čemu je potřeba ls a cd mi hlava nebererecurse(){
for i in "$1${1:+/}"*
do
echo $i
[ ! -L "$i" -a -d "$i" ] &&
pok "$i"
done
}
Protože oni mají jako zápočťák napsat jakýsi velmi zjednodušený find jako shellový skript. Jestli se nepletu, tenhle je třetí…
Jen jsem si chtěl rýpnout. Mám sto chutí to napsat nerekurzivně, ale není čas a zatím mě nenapadají zrovna hezké kousky kódu jak to udělat v bashi
s/pok/recurse/
{.,}* ale man bash ti poradí tisíckrát lépe. Jinak to zůstane jen černá magie.
shopt -s dotglob echo *a
echo {.,}*
se ovšem kromě pořadí výpisu liší i v tom, že druhý vypisuje i . a .. -- to se asi někdy hodí, ale zde by to byla komplikace.
Jojo, to máš pravdu. To už jsem jednou řešil při hledání největšího bumbrlíčka
du -s {.[^.],}* | sort -n | tailTo je tak, kyž si někdo nepřečte bash(1)
Mimo to mě napadlo řešení, které výpis udělá víc podobný findu nahradit $1${1:+/} elegantnějším ${1:-.}/
P.S.: A schválně nenapíšu to úplně konečné řešení 
shopt (protože co se soubory nebo adresáři co mají na začátku dvě tečky, že by {.[^.],..?,}*
). Krom toho tam stejně ještě mám chybku související s prázdnými adresáři (malá nápověda, i při tisku výsledku by se mělo ověřit, jestli danému výsledku něco odpovídá ve skutečnosti).
nullglob. Já si ten bash(1) vážně budu muset jednou přečíst.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.