GNU/Linux >> Znalost Linux >  >> Linux

Linux příkaz find - zobrazit průběh

Řešení 1:

s tímto trikem můžete vidět aktuální složku - ale žádný ukazatel průběhu - omlouvám se.

 watch readlink -f /proc/$(pidof find)/cwd

Řešení 2:

Malý nástroj s názvem pv (prohlížeč potrubí) může Pomoc. Z fantastického shrnutí Peterise Kruminse:

Prohlížeč kanálů je terminálový nástroj pro sledování průběhu dat prostřednictvím kanálu.

Pv můžete využít mnoha způsoby. Když si tady hrajeme, vkládám to hned za rouru, abych sledoval průběh výstupu generovaného funkcí find (měl by předat stdin do stdout nedotčené)

find / -mtime -1h | pv > /dev/null

který zobrazí výstup trochu takto:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(Přesměroval jsem stdout na /dev/null, abych mohl vidět ukazatel průběhu v akci, aniž by výstup prolétl. Pravděpodobně to není váš záměr při hledání, takže to přizpůsobte)

Upřímně si nejsem jistý, jak dobře to funguje ve volné přírodě. Zdálo se, že pro „drahé“ nálezy, jako je ten výše (přecházející z kořene), funguje docela dobře. U jednodušších příkazů v hlubším uzlu ve stromě adresářů selhal pv bídně. Tyto příkazy okamžitě vracejí výsledky, takže ukazatel průběhu je zde pravděpodobně diskutabilní.

V každém případě si pohrajte a zjistěte, zda to vůbec funguje pro to, co potřebujete. Alespoň k zamyšlení.

Řešení 3:

Dnes jsem to hledal a dostal jsem se sem přes Google. Měl jsem dlouhodobý nález běžící na OS X a zjevně watch tam neexistuje. Takže tady je další řešení:

lsof -Fn -a -c find -d cwd +r 10

  • lsof =seznam otevřených souborů
  • -Fn =pouze zobrazit název souboru/adresáře (předponou znak 'n', toto přeskočte, pokud dáváte přednost úplnému lsof výstup
  • -a =říct lsof zobrazíte pouze řádky odpovídající všem kritéria (ve výchozím nastavení zobrazuje řádky odpovídající jakémukoli kritéria)
  • -c find =zobrazit soubory/adresáře otevřené procesem s názvem find (ve skutečnosti proces, jehož jméno začíná find , ale rozlišují se malá a velká písmena, takže Finder se nezobrazí)
  • -d cwd =zobrazit řádky pomocí FD (filedescriptor) cwd (aktuální pracovní adresář)
  • +r 10 =zobrazit výstup každých 10 sekund, dokud nebudou nalezeny žádné otevřené soubory (hledání je dokončeno)

Zobrazí se adresář find zpracovává každých 10 sekund, takže by měl poskytnout představu, zda find stále funguje a jak daleko pokročil.

Řešení 4:

Příklad paralelního vyhledávání s find v man find . Pomocí něj můžete provádět více kontrol pro každou položku a provádět více akcí v závislosti na tom, která podmínka funguje. První kontrola může být například jednoduchá-print , takže všechna jména jsou vytištěna na stdout. Druhá kontrola udělá, co chcete. Něco jako:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)

Pokud by druhá kontrola měla zobrazit i názvy souborů, můžete jeden z nich přesměrovat na stderr pomocí -fprint /dev/stderr .

Řešení 5:

AFAIK, nemá a jeho implementace by byla netriviální.

... Hmm. Možná skript běžící find <target dir> -type d nejprve uložit seznam a poté opakovat každý adresář před spuštěním find <list item> -maxdepth 1 <rest of find parameters> ve smyčce for.

Všimněte si, že obchodujete za /značnou/ ztrátu výkonu výměnou za to, že můžete matně vidět, co to dělá.


Linux
  1. Linuxový příkaz mv

  2. Linux du command

  3. Linuxový ip příkaz

  1. Linux cd příkaz

  2. Výstup příkazu Linux jako parametr jiného příkazu

  3. Co je to příkaz k nalezení priority procesu v Linuxu?

  1. Jak používat příkaz DD Show Progress v Linuxu?

  2. 25 jednoduchých příkladů příkazu find v Linuxu

  3. najdete příklady příkazů v Linuxu