Ask Your Question
1

Jak spočítat soubory v adresáři

asked 2014-11-06 18:27:53 +0100

VojtechMyslivec gravatar image

updated 2014-11-06 18:53:15 +0100

Josef Kokeš gravatar image

Mám okno, nevím efektivnější způsob než for s in * ...

ls . |wc -l nefunguje, když se soubor jmenuje "a\nb"

edit retag flag offensive close delete

Comments

Aby bylo jasno: \n zde myslím opravdu znak nového řádku, ne "backslash n". Poznámka: Na Linuxu to celkem funguje bez zvláštních opatření. ls je celkem "chytrý" (podle toho, co tedy očekávám). Mě ukazuje soubor "a?b" (gnu ls 8.13). U Petra Hodače jsem viděl přímo "a\nb". Stejné chování se u mě zajistí přepínačem "--quoting-style=c" (odpověď @Mib) Pozor ale na Solaris (fray), kde se soubory vypíší tak jak jsou, tedy i se "speciálními" znaky (\n \r ...). díky @hody@MiB@Josef Kokeš

VojtechMyslivec ( 2014-11-06 22:56:16 +0100 )edit

Nepoužívá se k tomu náhodou ls -1?

Radomír Polách ( 2014-11-14 17:36:01 +0100 )edit

Tak to je zklamání, ls -1 nefunguje.

Radomír Polách ( 2014-11-14 17:40:00 +0100 )edit

Tak ls -q1 je workaround.

Radomír Polách ( 2014-11-14 20:29:22 +0100 )edit

Nevím, co myslíš tím workaround, ale ls -q funguje na frayi tak, že \n \q nahradí za otazník. Good point

VojtechMyslivec ( 2014-11-20 10:18:00 +0100 )edit

3 Answers

Sort by » oldest newest most voted
1

answered 2014-11-06 18:48:06 +0100

Josef Kokeš gravatar image

updated 2014-11-07 06:47:07 +0100

Do testu, i praktického, lze využít ls a wc, soubory obsahující v názvu nový řádek neuvažujeme. Kdybychom chtěli opravdu kompletní řešení, které si poradí i s novým řádkem, tak for je možná cesta, další je find s vhodným -printf nebo -exec, ještě další je stat s vhodným -c - to bude asi vůbec nejjednodušší, něco jako stat -c "%i" * .* | wc -l

edit flag offensive delete publish link more
3

answered 2014-11-06 22:35:54 +0100

MiB gravatar image

Případně je možné využít tak trochu „hack“ a nastavit quoting style:

ls --quoting-style=c | wc -l

Pak se nový řádek escapuje jako v Céčku. Ale to je jen tak pro zajímavost (kdyby to někdo skutečně potřeboval), do testu z PS1 se to nemá smysl učit.

edit flag offensive delete publish link more

Comments

Díky, tak to funguje. Bohužel ls na Solarisu to neumí. Navíc dle zájmu předmětu PS1 beru Pepovu odpověď jako přednější.

VojtechMyslivec ( 2014-11-06 22:59:02 +0100 )edit
0

answered 2014-11-06 18:31:41 +0100

Gabriel gravatar image

updated 2014-11-06 19:01:31 +0100

myslím, že to co hledáš je ls -l | wc -l

EDIT: pokud chceš čistě jenom soubory, bez adresářů, linků atd tak zkus ls -la | grep "^-" | wc -l

edit flag offensive delete publish link more

Comments

Špatně. `ls -l` vypíše také řádek s celkovou velikostí souborů. Navíc nevypíše skryté soubory.

Josef Kokeš ( 2014-11-06 18:49:06 +0100 )edit

Navíc otázka zněla, že tohle nefunguje, když se soubor jmenuje A\nB Jméno jednoho souboru je pak na dva řádky. Příklad s grepem: nepřítel pojmenuje soubor "A\n-" Grep si pak myslí, že je to další soubor ;)

VojtechMyslivec ( 2014-11-06 18:52:37 +0100 )edit

Doplnil jsem to o skryté soubory. Celková velikost souborů mi zmizí právě tím grepem.

Gabriel ( 2014-11-06 18:57:29 +0100 )edit

V době, kdy jsem to psal, ještě grep použit nebyl. Plus, pokud je otázka "spočítat soubory", tak sice můžeme diskutovat o tom, jestli se mají počítat třeba adresáře, ale není nejmenších pochyb o tom, že skryté soubory ze započítání vyloučeny nejsou.

Josef Kokeš ( 2014-11-06 18:58:07 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Stats

Asked: 2014-11-06 18:27:53 +0100

Seen: 330 times

Last updated: Nov 14 '14