Причина, по которой grep -v не соответствует должным образом, заключается в том, что find sample/
будет возвращать все совпадения как sample//some/path
, что нормально для bash.
Таким образом, чтобы ваш код работал по желанию в однострочном скрипте вы можете выполнить любое из следующих действий:
find sample -type d -print | grep -v "sample/opt/lib/log/access.log" | xargs rm -rf
find sample/ -type d -print | grep -v "sample//opt/lib/log/access.log" | xargs rm -rf
Но слово для мудрых ... возможно, что опечатка может найти вас удалить больше, чем вы хотели. Рекомендуется всегда иметь положительный результат проверки до xargs rm, например | grep sample | xargs rm -rf