Ask Your Question
1

find -pouze v aktualnim adresari

asked 2014-12-01 01:02:19 +0100

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.

edit retag flag offensive close delete

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š ( 2014-12-03 08:46:19 +0100 )edit

1 Answer

Sort by » oldest newest most voted
2

answered 2014-12-01 01:24:15 +0100

VojtechMyslivec gravatar image

updated 2014-12-01 22:10:31 +0100

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.

edit flag offensive delete publish link more

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š ( 2014-12-01 06:16:25 +0100 )edit

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 ( 2014-12-01 11:36:13 +0100 )edit

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š ( 2014-12-01 11:44:45 +0100 )edit

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 ( 2014-12-01 19:14:38 +0100 )edit

@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 ( 2014-12-01 22:00:13 +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]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-01 01:02:19 +0100

Seen: 178 times

Last updated: Dec 01 '14