Loading [MathJax]/jax/output/HTML-CSS/config.js
Ask Your Question
1

find -pouze v aktualnim adresari

asked Dec 1 '14

Vasek Svec gravatar image

Jak jde idealne do testu napsat vyhledavani souboru pouze v aktualnim adresari? Nekde mi funguje gfind . -maxdepth 1 nebo find . -maxdepth 1, ale neprijde mi to jako idealni.

Comments

Pokud do testu píšete -maxdepth 1, tak jste zvolil špatné řešení. Můžete se sice dostat ke správnému řešení, ale bude vás to stát (mnohem) víc úsilí, než je nezbytné.

Josef Kokeš (Dec 3 '14)
add a comment

1 Answer

Sort by » oldest newest most voted
2

answered Dec 1 '14

VojtechMyslivec gravatar image

updated Dec 1 '14

Ano, k tomu slouží predikát -maxdepth, ale ten je jenom u gnu find -- tedy jak správně píšeš, gfind na fray nebo find na gnu/linux.

Ve své podstatě je to ale zbytečné. Pokud něco nechceš dělat rekurzivně, tedy provést to jen v aktuálním adresáři, nemá smysl volat find. Stačí ls popřípadě ls -A. Úlohy jsou na to tak stavěny.

EDIT: @Josef Kokeš některé jednodušší úkoly jdou samozřejmě dělat pomocí pattern matchingu (*?[...] apod.) v daném adresáři.
V případě složitějších testů na jednotlivé soubory je vhodné použít for cyklus. Viz komentáře.

link

Comments

Přesně tak. Pokud chce úloha soubory jen z jednoho adresáře, tak find vůbec není potřeba.

Jenom bych se nespoléhal na to, že "stačí ls popřípadě ls -a".

Josef Kokeš (Dec 1 '14)

Sorry, měl jsem spíš na mysli ls -A. Proč by to nestačilo? Na výpis souborů samozřejmě. Zbytek záleží na způsobu řešení.

VojtechMyslivec (Dec 1 '14)

Protože pokud se něco dá udělat pomocí cp a*b dir, tak není rozumné dělat to pomocí cp `ls a*b` dir.

Josef Kokeš (Dec 1 '14)

Ale pokud použiji například ten příkaz cp a*b dir, nejsem schopný nijak ovlivnit, jestli se výraz nahradí adresářem nebo souborem. Takže pokud bude zadáno např. najdi všechny soubory pouze v aktuální složce, zbude mi nakonec opět jen gfind? (nebo filtrovat výstup z ls -ld *)

Vasek Svec (Dec 1 '14)

@Vasek Svec a co třeba for cyklus přes všechny soubory? for soubor in *; do ...; done resp. for soubor in * .*; ...
Filtrovat výstup ls -l je možné, ale to nedoporučuji (hlavně kvůli ne-pevně danému formátu, počtu sloupců, mezer, prázdných znaků ve jménech atd...). Ten for cyklus je čistší, můžeš dělat libovolné testy, akce, příkazy... Pro každý $soubor

@Josef Kokeš ale no tak ok, netušil jsem, že bychom měli brát v úvahu kanón na vrabce. I když dosazení proměnné se dá udělat i jako ...`echo "$PROM"`... nebo alespoň ..."`echo -n "$PROM"`"..., což jsem v testech taky viděl :-)

VojtechMyslivec (Dec 1 '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]

Question tools

Follow
1 follower

Stats

Asked: Dec 1 '14

Seen: 178 times

Last updated: Dec 01 '14