Я хотел бы найти все файлы png и jpg и использовать следующую команду, но результаты не возвращаются, если я заменил -a
на -o
он покажет мне список файлов. Это почему?
`find . -maxdepth 1 \( -iname \*\.png -a -iname \*\.jpg \)
Логическая ошибка. То, что вы говорите, 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 || ложь равно истине.
-a - это логическое И, означающее, что имя файла должно заканчиваться на оба.PNG и.JPG, чтобы быть правдой.
-o является логическим включающим ИЛИ, означающим, что имя файла должно заканчиваться на.PNG или.JPG (или оба), чтобы быть правдой.