Loading [MathJax]/jax/input/TeX/config.js
Ask Your Question
1

Jak spočítat soubory v adresáři

asked Nov 6 '14

VojtechMyslivec gravatar image

updated Nov 6 '14

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"

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 (Nov 6 '14)

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

Radomír Polách (Nov 14 '14)

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

Radomír Polách (Nov 14 '14)

Tak ls -q1 je workaround.

Radomír Polách (Nov 14 '14)

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

VojtechMyslivec (Nov 20 '14)
see more comments

3 Answers

Sort by » oldest newest most voted
1

answered Nov 6 '14

Josef Kokeš gravatar image

updated Nov 7 '14

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

link
add a comment
3

answered Nov 6 '14

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.

link

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 (Nov 6 '14)
add a comment
0

answered Nov 6 '14

Gabriel gravatar image

updated Nov 6 '14

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

link

Comments

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

Josef Kokeš (Nov 6 '14)

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 (Nov 6 '14)

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

Gabriel (Nov 6 '14)

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š (Nov 6 '14)
add a comment

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: Nov 6 '14

Seen: 330 times

Last updated: Nov 14 '14