Рекурсивный список файлов с именами, которые не содержат определенной строки
У меня есть: каталог с множеством вложенных подкаталогов и файлов.
Я хотел бы: список всех файлов, имя которых не содержит определенной строки.
Пример структуры файла:
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