Как работает оператор AND в команде FIND? - PullRequest
0 голосов
/ 22 мая 2009

Мой последний вопрос расширен, поэтому давайте проанализируем вещи отдельно.

И-оператор, Пересечение?

Я приведу пример:

$ find . | awk -F"/" '{ print $2 }'

.zcompdump
.zshrc
.zshrc_copy
.zshrc_somequy
.bashrc
.emacs

$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }'

.bashrc
.emacs
.gdbinit
.git
.profile

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

find -f all_files -and -f right_files .

Я хочу только:

.bashrc
.emacs

Ответы [ 3 ]

1 голос
/ 22 мая 2009

Чтобы немного расширить ответ Дейва:

Похоже, вы хотите пересечение двух команд поиска. Find не делает манипуляции с наборами. Поиск проходит вниз (или вверх в зависимости от того, как вы на него смотрите) набор путей и применяет выражение к каждому элементу, с которым он сталкивается. Действие по умолчанию - распечатать путь найденных элементов, которые оцениваются как истинные по выражениям. (Я полагаю, что некоторые старые версии find требовали явного добавления выражения -print.) Это не сопоставляет результаты. Для анализа пересечений вы можете использовать такие инструменты, как diff, sdiff, comm .

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

Принимая bash, вы можете сделать что-то вроде

comm -12 <(find .  -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort)

Я полагаю, что -и в командах поиска почти всегда излишни. Ex.

find . -type f ! -type d 

То же, что и

find . -type f -and ! -type d

Также флаг -f - это опция для добавления к путям для прохождения. Я не верю, что это выражение. Пожалуйста, "человек найти" для разъяснения.

1 голос
/ 22 мая 2009

- и работает только на тестах. Если вы хотите найти общие элементы двух списков, вы должны сделать что-то вроде

sort all_files > all_files.sorted
sort right_files > right_files.sorted
comm -12 all_files right_files > common_files
0 голосов
/ 22 мая 2009

И-опция в человеке

Оператор -and является логическим И оператор. Как оно есть вытекает из сопоставления двух выражений делает не нужно указывать. Выражение оценивает в true, если оба выражения верны. Второй выражение не оценивается, если первое выражение ложно.

Эта часть руководства довольно загадочна для меня. Однако давайте проанализируем это.

1-е предложение: как оператор AND в математике. Два два 1с только!

2-е предложение: Это говорит о том, что вам не нужно использовать команду, как вы можете видеть в ответе Дейва. Большой! - - Кажется, что оно сочетает 1-е выражение с -AND с и Expression без -AND. Пожалуйста, объясните мне этот греческий.

3-е предложение: повторение: то же самое говорится в 1-м предложении словом "логический".

4-е предложение: повторение: говорится, что 01 означает ложь

То же на английском:

Пусть p и q два выражения со следующими значениями истинности

p q pANDq
1 1 1
1 0 0
0 1 0
0 0 0

, где 1 означает истину, а 0 ложь.

Обратите внимание, что руководства содержат часто лишнее описание, а иногда и ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...