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ěď.