ПРИМЕЧАНИЕ. Я хотел игнорировать файлы, начинающиеся с '.' (в текущей и вложенных папках), но не мог понять, как я согласился на .svn
Одна проблема, я не мог понять, как сделать ^. (игнорировать, если начать с?) работать. Я уверен, что одной проблемой является тот факт, что я делаю. * Который будет игнорировать мой .tab. править, и я не уверен, как обойти.
Тест -regex
на find
применяется к полному пути, а не только к имени файла. Со страницы руководства:
Например, чтобы сопоставить файл с именем «./fubar3», вы можете использовать регулярное выражение «. * Bar.» или '. * b. * 3', но не 'f. * r3'.
ответ soulmerge предоставляет один из способов привести все ваши условия в утверждение поиска; Вы также можете сделать это с чем-то вроде
find * -regex 'include-pattern' -a ! \( -regex 'exclude-pattern' [-o 'exclude-pattern2' ...] \)
Если вы хотите объединить несколько шаблонов для исключения, будь то в вашем потоке или в регулярных выражениях find, просто используйте или:
grep -v '\.svn\|.tab.\|.yy.'
egrep -v '\.svn|.tab.|.yy.'
Обратите внимание, что очень и очень хорошая идея использовать одинарные кавычки для регулярных выражений - вам не нужно, чтобы $ пытался раскрыть переменную.
Edit:
Те исключающие шаблоны, которые вы предлагаете, на самом деле не должны быть регулярным выражением. Вы можете получить их только с -name, которое соответствует только фактическому имени, а не всему пути.
find * -regex 'include-pattern' -a ! \( -name .svn -o -name "*tab*" \)