Рекурсивный список файлов с именами, которые не содержат определенной строки

У меня есть: каталог с множеством вложенных подкаталогов и файлов.

Я хотел бы: список всех файлов, имя которых не содержит определенной строки.

Пример структуры файла:

foo/
foo/bar/foobar.txt
foo/foo/foobartest.txt
foo/foobartest.txt

Если я введу свой запрос со строкой "test", он должен вернуть только /foo/bar/foobar.txt

Я полагаю, можно использовать find с некоторым регулярным выражением?

Большое спасибо за вашу помощь!

2 ответа

Решение

Зависит от того, что вы хотите в выводе.

ls -R | grep -v test

Или же

find foo -type f | grep -v test

Вы можете отформатировать вывод с помощью таких инструментов, как Perl или AWK

Если вы хотите получить

список всех файлов , имя которых не содержит определенной строки

Вы должны пойти с чем-то вроде этого:

find foo/ -type f -exec bash -c "basename {} | grep -v 'test' > /dev/null && echo {}" \;Это будет соответствовать только имени файла, но вывести относительный путь, как обычно делает поиск.
Может быть, кто-то может предложить более элегантное решение?

Если сопоставление с относительным путем в порядке, вы можете пойти с ответом, предоставленным @ bodhi.zazen:

find foo -type f | grep -v test

Другие вопросы по тегам