Portál AbcLinuxu, 26. dubna 2024 11:52
rekurse() { for f in *; do echo "$PWD/$f" if [ -d "$f" ]; then cd "$f" ls recurse cd .. fi done } recurseale 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í…
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.