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
Copyright students of FIT CTU and others, 2014. Content on this site is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license.
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é.