Portál AbcLinuxu, 10. května 2025 01:20
ls /home/http/ | while read DIR;echo $DIR; V nápovědě jsem prd našel :(
Řešení dotazu:
find . -maxdepth 1 -type d?
man ls
, ls --help
nebo info coreutils 'ls invocation'
?
find . -maxdepth 1 -type d \! -name .
Prezradíš nám dôvod, prečo musíš použiť ls
, a nie find
? Určite to zaujíma nielen mňa.
Použiť ls
možné je, každopádne to je v porovnaní s find
dosť hlúpe riešenie:
for I in `ls -A`; do if [ -d $I ]; then echo $I; fi; done
Samozrejme, možností je oveľa viac, krkolomnosti sa medze nekladú
ls -l | awk '/^d/{print $9}'
$8
ls (GNU coreutils) 8.5
i ve FreeBSD v 1.66 2002/09/21
verzi mám název v 9. sloupci.
Zaujímavý detail. Funguje mi to podľa nastavených locales, ak použijem xx_XX, je to ako píšeš 9. stĺpec, pri xx_XX.UTF-8 je to stĺpec 8. Každopádne toto fungovanie môže byť zdrojom prúseru.
Rovnako sa mi to deje na Ubuntu, CentOS, SuSE. Solaris funguje vždy rovnako a berie stĺpec 9.
LANG=POSIX ls -la je to v 9. sloupci vždy. Ale stejně to není správná cesta. Co když název souboru bude obsahovat mezeru nebo LF? Na podobné vylomeniny se používá find.
ls -F /home/http/|egrep "/$"
'ls -d */'
nevyhovuje?
ls -d */ .*/ nebo ls -d */ .*/ | sed 1,2d
ls -d */
, dle mého soudu tam je ls
potřeba aby se to expandovalo, takže to za řešení pomocí ls
považuji také. Stejně tak, jako echo */
bych považoval za řešení echem.
ls >/dev/nullaby tam bylo ls...
find
, takže bohužel... :)
for x in ...
, jak naznačuje dotaz, tak tam je to ls úplně stejně zbytečné jako v řešení s find.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.