Vyhledávání zdrojových souborů v projektu
Použijte jednodušší příkaz
Obecně je zdroj pro projekt pravděpodobně na jednom místě, možná v několika podadresářích vnořených ne více než dva nebo tři hluboko, takže můžete použít (možná) rychlejší příkaz, jako je
(cd /path/to/project; ls *.c */*.c */*/*.c)
Využijte metadata projektu
V projektu C byste obvykle měli Makefile. V jiných projektech můžete mít něco podobného. Mohou to být rychlý způsob, jak extrahovat seznam souborů (a jejich umístění), napsat skript, který tyto informace využije k vyhledání souborů. Mám skript "zdroje", takže mohu psát příkazy jako grep variable $(sources programname)
.
Urychlení hledání
Hledejte méně míst místo find / …
použijte find /path/to/project …
kde je to možné. Co nejvíce zjednodušte kritéria výběru. Pokud je to efektivnější, použijte kanály k odložení některých kritérií výběru.
Můžete také omezit hloubku vyhledávání. Pro mě to hodně zlepšuje rychlost 'najít'. Můžete použít přepínač -maxdepth. Například '-maxdepth 5'
Zrychlení lokalizace
Ujistěte se, že indexuje umístění, která vás zajímají. Přečtěte si manuálovou stránku a použijte jakékoli možnosti, které jsou vhodné pro váš úkol.
-U <dir>
Create slocate database starting at path <dir>.
-d <path>
--database=<path> Specifies the path of databases to search in.
-l <level>
Security level. 0 turns security checks off. This will make
searchs faster. 1 turns security checks on. This is the
default.
Odstraňte potřebu hledání
Možná hledáte, protože jste zapomněli, kde co je nebo nebylo řečeno. V prvním případě pište poznámky (dokumentaci), v druhém se ptejte? Konvence, standardy a konzistence mohou hodně pomoci.
Použil jsem část „zrychlení lokalizace“ v odpovědi RedGrittyBrick. Vytvořil jsem menší db:
updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"
pak ukázal locate
na to:locate -d /home/benhsu/ben.db
Taktika, kterou používám, je použít -maxdepth
možnost s find
:
find -maxdepth 1 -iname "*target*"
Opakujte s narůstající hloubkou, dokud nenajdete, co hledáte, nebo vás hledání omrzí. Prvních několik iterací se pravděpodobně vrátí okamžitě.
To zajišťuje, že nebudete ztrácet čas předem prohlížením hlubin mohutných podstromů, když to, co hledáte, je pravděpodobněji blízko základny hierarchie.
Zde je příklad skriptu pro automatizaci tohoto procesu (Ctrl-C, když vidíte, co chcete):
(
TARGET="*target*"
for i in $(seq 1 9) ; do
echo "=== search depth: $i"
find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)
Všimněte si, že související redundance (každý průchod bude muset projít složkami zpracovanými v předchozích průchodech) bude z velké části optimalizován pomocí ukládání do mezipaměti disku.
Proč ne find
mají toto pořadí vyhledávání jako vestavěnou funkci? Možná proto, že by to bylo komplikované/nemožné implementovat, pokud byste předpokládali, že redundantní procházení je nepřijatelné. Existence -depth
možnost naznačuje možnost, ale bohužel...