Я пытаюсь отменить команду поиска, чтобы получить все остальные файлы, кроме файла или файлов в команде.

find . -maxdepth 1 -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \;

Судя по моему последнему сообщению, мне кажется, что я должен поставить- -not впереди -regex .

Если я пытаюсь выполнить команду, она терпит неудачу, то есть возвращает сообщение о недопустимости или я делаю это неправильно?

find . -maxdepth 1 -not -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \;

или же

find . -maxdepth 1 ! \( -regextype posix-egrep -regex '.*/.*\.svg' -exec echo {} \; \)

1 ответ1

1

Если у вас нет требований, не упомянутых в вашем вопросе, вы излишне усложняете вопросы. Просто попробуйте что-то вроде этого:

find . -maxdepth 1 -type f | grep -v *\.svg

find выводит имена файлов, которые находит по умолчанию; вам не нужно echo {} . Вам также не нужно регулярное выражение вообще; Вы можете просто запустить:

find . -maxdepth 1 ! -name "*.svg"

В любом случае, даже если вы сделали нужно регулярное выражение, вы используете без необходимости сложной. *\.svg будет так же хорошо, как и .*/.*\.svg ; поскольку все, что вас интересует, это конец имени файла, нет необходимости указывать что-либо о родительском каталоге.

То есть, если вы не хотите файлы, имя которых начинается с литерала . если так, беги

find . -maxdepth 1 ! -name "\.*\.svg"

Если вам действительно нужно regex (которое, как я подчеркиваю, не соответствует тому, что вы указали в своем вопросе), вы можете отменить его, как и любой другой флаг:

find . -maxdepth 1 -regextype posix-egrep ! -regex '.*/.*\.svg'

! значит not . Его размещение на самом деле вполне логично, оно прямо перед тем, что вы хотите отрицать. В приведенном выше примере вы отрицая regex а не regextype вот ! идет прямо перед -regex .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .