Chápu, že -exec
může mít +
možnost napodobit chování xargs
. Existuje nějaká situace, kdy byste preferovali jednu formu před druhou?
Osobně mám tendenci preferovat první formu, už jen proto, abych se vyhnul použití dýmky. Určitě si myslím, že vývojáři find
musí provést příslušné optimalizace. Mám pravdu?
Přijatá odpověď:
Možná budete chtít zřetězení hovorů najít (kdysi, když jste se dozvěděli, že je to možné, což by mohlo být dnes). To je samozřejmě možné pouze tak dlouho, dokud zůstanete v nálezu. Jakmile přejdete na xargs, je to mimo rozsah.
Malý příklad, dva soubory a.lst a b.lst:
cat a.lst
fuddel.sh
fiddel.sh
cat b.lst
fuddel.sh
Žádný trik – prostě fakt, že oba obsahují „fuddel“, ale pouze jeden obsahuje „fiddel“.
Předpokládejme, že jsme to nevěděli. Hledáme soubor, který odpovídá 2 podmínkám:
find -exec grep -q fuddel {} ";" -exec grep -q fiddel {} ";" -ls
192097 4 -rw-r--r-- 1 stefan stefan 20 Jun 27 17:05 ./a.lst
Možná znáte syntaxi pro grep nebo jiný program pro předání obou řetězců jako podmínky, ale o to nejde. Zde lze použít každý program, který může vrátit hodnotu true nebo false, zadaný soubor jako argument – grep byl jen oblíbený příklad.
A všimněte si, že můžete postupovat podle find -exec pomocí dalších příkazů hledání, jako je -ls nebo -smazat nebo něco podobného. Všimněte si, že smazat nejen rm (odstraní soubory), ale také rmdir (odstraní adresáře).
Takový řetězec se čte jako kombinace příkazů AND, pokud není uvedeno jinak (konkrétně pomocí -or
přepínač (a závorky (které potřebují maskování))).
Takže neopouštíte vyhledávací řetězec, což je šikovná věc. Nevidím žádnou výhodu v použití -xargs, protože musíte být opatrní při předávání souborů, což je něco, co hledání nemusí dělat – automaticky zpracovává každý soubor jako jediný argument za vás.
Pokud si myslíte, že potřebujete nějaké maskování pro nálezy {} složených závorek, neváhejte navštívit mou otázku, která vyžaduje důkazy. Moje tvrzení zní:Nemáte.
Související:adherence -Najdi význam- Vyhledávání ve slovníku!