GNU/Linux >> Znalost Linux >  >> Linux

Najít -exec + Vs Najít | Xargs:Který si vybrat?

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!
Linux
  1. Jak začlením potrubí | v mém linuxovém příkazu find -exec?

  2. find -exec cmd {} + vs | xargs

  3. najít -exec funkci shellu v Linuxu?

  1. Debian vs. Ubuntu pro serverové použití, který si vybrat

  2. AlmaLinux vs Rocky Linux:Který si vybrat?

  3. Size() vs ls -la vs du -h která velikost je správná?

  1. Získání možnosti -exec v aplikaci Najít do práce?

  2. Vymanit se z hledání, pokud selže -exec?

  3. Manipulovat {} Vrátit řetězec z Find -exec?