Portál AbcLinuxu, 10. května 2025 05:06

Dotaz: Vypsani adresaru

4.8.2012 15:36 pedro
Vypsani adresaru
Přečteno: 296×
Odpovědět | Admin
Jak se v linuxu vypisuji vsechny adresare?

Zkousel jsem si postupne:

1. vytvorit soubor:
touch soubor

2. vytvorit skryty soubor:
touch .skryty

3. vytvorit adresar
mkdir adresar

4. vypsat soubory
ls

vypise se: adresar soubor

5. vypsat vsechny soubory
ls -a

vypise se: . .. adresar soubor

6. vypsat jen adresare
ls -d

vypise se: .


A tady jsem skoncil a nechapu proc se nevypsalo ". .. adresar" ???
Taky moc nechapu proc se vypisuje . a .. kdyz jsou to jen pomucky jak oznacit aktualni adresar a ten nad nim. Aktualni adresar a jeho parent prece nejsou v aktualnim adresari.
Linux je dost nelogicky :-/

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.8.2012 15:50 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: Vypsani adresaru
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je jednoduche. '-d' neznamena 'vypis jen adresare', ale 'pokud je argument adresar, tak vypis jeho jmeno a ne obsah'. To ma smysl, pokud se ls pouziva se jmeny souboru/adresaru jako argumenty (napr. wildcards jako '*'). Pokud se zadne jmeno souboru ci adresare jako argument nepreda, tak se implicitne mini '.' jako aktualni adresar. No a '-d' znamena, ze se to jmeno primo zobrazi. Zkus si radsi 'ls *' nebo 'ls -d *'
martin-ux avatar 4.8.2012 17:16 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Vypsani adresaru
Odpovědět | | Sbalit | Link | Blokovat | Admin
tak sa sprava ls command. mozes pouzit switch -A - almost all - ten ti ich uz nevypise (./..).

myslim, ze ls nema sam o sebe taky switch, ze by vypisal len adresare tak ako chces ty. da sa s tym vsak pohrat a poskladat kommandy. napriklad:
ls -la | grep ^d
alebo cez find:
find ./* -type d  -prune
ak chces aj dot directories (co su akoze "skryte"), ale nie cwd/parent dir (./..):
find ./* ./.* -type d -prune \! -name . \! -name ..
ja osobne dost casto pouzivam ten "dirty" ls. nie je to asi celkom koser, ale posluzi.
..when you do things right, people won't be sure you've done anything at all..
pavlix avatar 4.8.2012 17:47 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Vypsani adresaru
ls -la | grep ^d
Taky používám toto.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
martin-ux avatar 5.8.2012 10:30 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Vypsani adresaru
cisto pomocou ls by to malo vyzerat asi takto:
ls -ld */ .*/
(bez .*/) aby nelistoval dot directories. ale ten ls+grep sa podla mna da rychlejsie napisat na klavesnici, je sikovnejsi. tento cez ls mozes skor pouzit pri skripte, aby si sa zbytocne neforkoval cez grep.
..when you do things right, people won't be sure you've done anything at all..
5.8.2012 14:39 pedro
Rozbalit Rozbalit vše Re: Vypsani adresaru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prikaz 'ls -d */' funguje tak jak jsem si predstavoval, 
akorat pridava za adresare lomitko.

Prepinac -d jsem uz pochopil, ale uz nechapu proc nefunguje 'ls -d *'. 
Proc se tam musi psat to lomitko. Grep jde pouzit jen na vypis, 
kde se vypisou prava a typ souboru/adresare, ale na jednoduchy vypis uz ne.

Ach jo, je to tak nejednotne a nelogicke, ze se to budu muset naucit nazpamet, ale prikazova radka linuxu me urcitym zpusobem pritahuje :)
pavlix avatar 5.8.2012 14:57 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Vypsani adresaru
Prepinac -d jsem uz pochopil, ale uz nechapu proc nefunguje 'ls -d *'.
Nepochopil. Volba -d není filtr, ale potlačuje vlastnost ls, že vypisuje obsah adresářů předaných na příkazové řádce. Takže ls -d * funguje zcela správně, ale je jednoduší použít prosté ls -l. Doporučuju si před to ls napsat ještě echo, aby se třeba nestalo, že máš pocit, že ls vidí tu hvězdičku. Nevidí, hvězdu řeší shell.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
martin-ux avatar 5.8.2012 15:08 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Vypsani adresaru
tak ako ti povedal @pavlix, ten asterisk (*) riesi shell, nie prikaz ls. * je regularny vyraz a znamena vsetko (v jednoduchosti povedane). ciste ls sa da simulovat aj cez echo:
echo * .*
neviem ake prostredie ti je familiarne, ale aj DOSovske (ci teraz Windowsacke) dir sa sprava velmi podobne ..

inu naspamat sa ich ucit nemusis. mas tu na to man stranky:
# man man
# man ls
co pouzivas casto si zapamatas..
..when you do things right, people won't be sure you've done anything at all..
5.8.2012 15:25 l4m4
Rozbalit Rozbalit vše Re: Vypsani adresaru
* není regulární výraz ale wildcard shellu (tj. něco s v zásadě podobnou funkcí, ale jinou syntaxí).

Mezi expansí v MS-DOSu a unixech je velký rozdíl: v MS-DOSu si programy expandují wildcards každý sám (takže program dostane doslova argument třeba *.txt), kdežto v unixech je expanduje shell (takže program dostane už expandovaný seznam souborů).
martin-ux avatar 5.8.2012 16:26 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Vypsani adresaru
porovnaval som len spravanie dir a ls a ich vypis z pohladu uzivatela; preto som pouzil aj alibisticke slovicka ako: "podobny", "v jednoduchosti povedane".

inak mas pravdu.
..when you do things right, people won't be sure you've done anything at all..

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.