Відповіді:
Використовуйте параметр командного рядка -vабо --invert-match,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
або
grep --invert-match
Ви також можете зробити те ж саме, використовуючи find:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Більше інформації тут .
findКоманда є найбільш семантичним вирішенням цієї проблеми XY. Поєднання lsі grepдля цієї мети в кращому випадку здається хитким. Це має бути прийнятою відповіддю. (+1)
Додайте -vопцію до своєї grepкоманди, щоб інвертувати результати.
grep "subscription" | grep -v "spec"
-v/--invert-matchне обов'язково перегортатиме, чиgrepвказує код повернення успішного виконання, але натомість відповідатиме рядкам, які в іншому випадку не відповідали б. Тим, хто хоче інвертувати код повернення (тобто досягти успіху, якщо всі рядки не відповідають шаблону, а не принаймні одному), повинні використовувати! grep. Це знаходить застосування в умовних виразах, наприклад:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi.