Hledám ve svém domovském adresáři soubory, které byly změněny během posledních dvou minut a které také obsahují určitý řetězec. Zkusil jsem to pomocí tohoto příkazu:
find -type d -mmin -2 -ls | grep -Ril "mystring"
Zdá se, že to funguje, ale zřejmě vytiskne pouze soubory s daným řetězcem uvnitř, nikoli soubory obsahující řetězec naposledy upravené před 2 minutami. Zdá se, že první část příkazu není provedena.
Přijatá odpověď:
Měli jste dobrý pokus s vlastním návrhem
find -type d -mmin -2 -ls | grep -Ril "mystring"
To by identifikovalo adresáře (-type d ), které byly změněny během posledních dvou minut, nikoli soubory (-type f ). Propojení výstupu -ls na grep by obvykle hledali ve vygenerovaných názvech souborů mystring . V tomto případě však -R flag změní chování grep a ignoruje váš seznam názvů souborů a místo toho prohledává každý soubor v aktuálním adresáři a pod ním.
Rozdělme tedy problém na dvě části
-
Vyhledejte naposledy upravené soubory za poslední 2 minuty ve svém domovském adresáři
find ~ -type f -mmin -2 -
[Files], které obsahují určitý řetězec
grep -Fl 'certain String' {files...}
Nyní je musíte dát dohromady. {} je zástupný symbol pro názvy souborů generované find z kroku 1 a koncové + označuje, že {} lze opakovat vícekrát , tj. několik názvů souborů
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Změna grep na echo grep vám ukáže, co spouští find příkaz; toto může být užitečná technika ladění:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Zvažte prosím spuštění man find a man grep abyste zjistili, jaké jsou různé možnosti, jako je -F a -l v grep -Fl , protože jinak se ze cvičení, které jste si stanovili, nic nenaučíte; právě kopírujete odpověď.