find -pouze v aktualnim adresari
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.
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.
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.
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
".
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í.
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
.
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 :-)
Asked: 2014-12-01 01:02:19 +0100
Seen: 178 times
Last updated: Dec 01 '14
Pokud do testu píšete
Josef Kokeš ( 2014-12-03 08:46:19 +0100 )edit-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é.