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?
Můžete to provést pomocí negovaného -regex
, také:-
find ./ ! -regex '.*\(deb\|vmdk\)$'
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.
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
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ů.