it-swarm-eu.dev

Jak zkombinovat podmínky pro nalezení 2 jmen?

Chtěl bych vyhledat soubory, které by neodpovídaly 2 -name podmínky. Dokážu to takto:

find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"

a to přinese správný výsledek, ale mohu se připojit k těmto 2 podmínkám s OR nějak?

108
Patryk

Můžete to provést pomocí negovaného -regex, také:-

 find ./ ! -regex  '.*\(deb\|vmdk\)$'
52
Alex Leach

ano můžeš:

find /media/d/ -type f -size +50M ! \( -name "*deb" -o -name "*vmdk" \)

Vysvětlení specifikace POSIX :

! výraz: Negace primárního; unární operátor NOT.

( výraz): Pravda, pokud je výraz pravdivý.

výraz - o výraz: Střídání primárů; operátor OR). Druhý výraz se nevyhodnocuje, pokud je první výraz pravdivý.

Všimněte si, že závorky, otevírací i zavírací, jsou předponou zpětného lomítka (\) zabránit hodnocení Shellem.

162
Serge

Byli jste blízko řešení:

find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"

Následující logické operátory můžete kombinovat v libovolném pořadí:

-a   -and      - operator AND
-o   -or       - operator OR
!              - operator NOT
28
DenisKolodin

Regulární výrazy můžete používat jako v:

find /media/d -type f -size +50M ! -regex '\(.*deb\|.*vmdk\)'

Zpětné lomítko je únikový znak; . odpovídá jednomu znaku a * slouží k přiřazení předchozího znaku nula nebo vícekrát, takže .* znamená shodu nula nebo více znaků.

6
Francesco Turco