1

Я хотел бы найти все файлы png и jpg и использовать следующую команду, но результаты не возвращаются, если я заменил -a на -o он покажет мне список файлов. Это почему?

`find . -maxdepth 1 \( -iname \*\.png -a -iname \*\.jpg \)

2 ответа2

2

Логическая ошибка. То, что вы говорите, find :

найти в этой папке все файлы (PNG и JPG)

Но, разумеется, нет файлов, которые одновременно используются, поэтому -o работает:

найти в этой папке все файлы (PNG или JPG)

При построении этих запросов просто представьте, find каждый файл проходит тестирование. Затем примените логическую логику. Так, например:

  • Находит файл .txt. Это не PNG (ложь) и не JPG (ложь), поэтому false && false равно false

  • Он находит файл .png. Это PNG (true), а не JPG (false), поэтому true && false равно false

  • Он находит файл .jpg. Это не PNG (false), а JPG (true), поэтому false && true равно false

  • Если вы используете ключ -o и он находит файл .png, то это PNG (true) и не JPG (false), поэтому true || ложь равно истине.

2

-a - это логическое И, означающее, что имя файла должно заканчиваться на оба.PNG и.JPG, чтобы быть правдой.

-o является логическим включающим ИЛИ, означающим, что имя файла должно заканчиваться на.PNG или.JPG (или оба), чтобы быть правдой.

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