Відповіді:
Використовуйте параметр командного рядка -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
.