bash: отфильтровывать каталоги и расширения из find? - PullRequest
2 голосов
/ 03 августа 2010

Я пытаюсь найти файлы, измененные недавно с этим

find . -mtime 0

, что дает мне

en/content/file.xml
es/file.php
en/file.php.swp
css/main.css
js/main.js

Но я бы хотел отфильтровать en и es каталоги, но хотел бы взять что-нибудь еще.Кроме того, я хотел бы отфильтровать .swp файлов по результатам этих.

Поэтому я хочу вернуться:

css/main.css
js/main.js
xml/foo.xml

В дополнение к любому другому файлу, не входящему вes/en и не заканчивается .swp

Ответы [ 5 ]

10 голосов
/ 03 августа 2010

правильно, просто найти:

find -mtime 0 -not \( -name '*.swp' -o -path './es*' -o -path './en*' \)
3 голосов
/ 03 августа 2010

Команда -prune предотвращает спуск формы поиска по каталогам, которых вы хотите избежать:

find . \( -name en -o -name es \) -prune , -mtime 0 ! -name "*.swp"
2 голосов
/ 03 августа 2010

Попробуйте это:

find . -mtime 0 | grep -v '^en' | grep -v '^es'

Добавление символа cap в начале шаблона, заданного grep, гарантирует, что он необходим для поиска шаблона в начале строки.

Обновление: После комментария (ов) Чена Леви используйте приведенное ниже вместо

find . -mtime 0 | grep -v '^\./en' | grep -v '^\./es'

находка отличная, но реализация в разных версиях UNIX отличается, поэтому я предпочитаю решения, которые легче запомнить, и использующие команды с более стандартными опциями

2 голосов
/ 03 августа 2010
find . -mtime 0 | grep -v '^en' | grep -v '^es' | grep -v .swp

Флаг -v для grep возвращает все строки, которые не соответствуют шаблону.

0 голосов
/ 04 августа 2010

Опция -regex для find (1) (которую можно комбинировать с опцией -E для включения расширенных регулярных выражений) также соответствует всему пути к файлу.

find . -mtime 0 -not \( -name '*.swp' -o -regex '\./es.*' -o -regex '\./en.*' \)
find "$(pwd -P)" -mtime 0 -not \( -name '*.swp' -o -regex '.*/es.*' -o -regex '.*/en.*' \)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...